Chromium Code Reviews| Index: chrome/browser/renderer_context_menu/open_with_menu_observer.cc |
| diff --git a/chrome/browser/renderer_context_menu/open_with_menu_observer.cc b/chrome/browser/renderer_context_menu/open_with_menu_observer.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4f4ad713ae86024acb50d19f0f7a455a47b4cd0c |
| --- /dev/null |
| +++ b/chrome/browser/renderer_context_menu/open_with_menu_observer.cc |
| @@ -0,0 +1,79 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/renderer_context_menu/open_with_menu_observer.h" |
| + |
| +#include "chrome/app/chrome_command_ids.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "content/public/common/context_menu_params.h" |
| + |
| +#if defined(USE_ASH) |
| +#include "ash/renderer_context_menu/open_with_menu_controller.h" |
| +#include "ash/shell.h" |
| + |
| +namespace { |
| + |
| +const size_t kMaxOpenWithMenuItems = |
| + IDC_CONTENT_CONTEXT_OPEN_WITH_LAST - IDC_CONTENT_CONTEXT_OPEN_WITH1 + 1; |
| + |
| +ash::OpenWithMenuController* GetController() { |
| + if (!ash::Shell::HasInstance()) |
| + return nullptr; |
| + return ash::Shell::GetInstance()->open_with_menu_controller(); |
| +} |
| + |
| +} // namespace |
| +#endif |
| + |
| +OpenWithMenuObserver::OpenWithMenuObserver(RenderViewContextMenuProxy* proxy) |
| + : proxy_(proxy), num_items_initially_enabled_(0) {} |
| + |
| +OpenWithMenuObserver::~OpenWithMenuObserver() {} |
| + |
| +void OpenWithMenuObserver::InitMenu(const content::ContextMenuParams& params) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + if (params.link_url.is_empty()) |
| + return; |
| +#if defined(USE_ASH) |
|
hidehiko
2016/03/14 12:07:05
No error handling is needed?
Yusuke Sato
2016/03/15 00:00:13
For non-ASH configurations, InitMenu does nothing
|
| + ash::OpenWithMenuController* controller = GetController(); |
| + if (controller) { |
| + num_items_initially_enabled_ = controller->PopulateOpenWithMenu( |
| + proxy_, IDC_CONTENT_CONTEXT_OPEN_WITH1, kMaxOpenWithMenuItems, |
| + params.link_url); |
| + } |
| +#endif |
| +} |
| + |
| +bool OpenWithMenuObserver::IsCommandIdSupported(int command_id) { |
| + return (command_id >= IDC_CONTENT_CONTEXT_OPEN_WITH1) && |
| + (command_id <= IDC_CONTENT_CONTEXT_OPEN_WITH_LAST); |
|
hidehiko
2016/03/14 12:07:05
Handled value range was changed from, at least, PS
Yusuke Sato
2016/03/15 00:00:13
PS4's also works fine, but was overkill. The funct
|
| +} |
| + |
| +bool OpenWithMenuObserver::IsCommandIdChecked(int command_id) { |
| + return false; |
| +} |
| + |
| +bool OpenWithMenuObserver::IsCommandIdEnabled(int command_id) { |
| + return (command_id >= IDC_CONTENT_CONTEXT_OPEN_WITH1) && |
| + (command_id < |
| + IDC_CONTENT_CONTEXT_OPEN_WITH1 + num_items_initially_enabled_); |
| +} |
| + |
| +void OpenWithMenuObserver::ExecuteCommand(int command_id) { |
| +#if defined(USE_ASH) |
| + ash::OpenWithMenuController* controller = GetController(); |
| + if (controller) { |
| + controller->ExecuteCommand(command_id); |
| + controller->MenuClosed(); |
| + } |
| +#endif |
| +} |
| + |
| +void OpenWithMenuObserver::OnMenuCancel() { |
| +#if defined(USE_ASH) |
| + ash::OpenWithMenuController* controller = GetController(); |
| + if (controller) |
| + controller->MenuClosed(); |
| +#endif |
| +} |