Chromium Code Reviews| Index: components/renderer_context_menu/render_view_context_menu_base.h |
| diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.h b/components/renderer_context_menu/render_view_context_menu_base.h |
| similarity index 52% |
| copy from chrome/browser/renderer_context_menu/render_view_context_menu.h |
| copy to components/renderer_context_menu/render_view_context_menu_base.h |
| index 5b5932eedbe389723dccce7742d091b2821454c6..9d4ac636c0fc38bc8f855d37c2f6ae7ae8604ed3 100644 |
| --- a/chrome/browser/renderer_context_menu/render_view_context_menu.h |
| +++ b/components/renderer_context_menu/render_view_context_menu_base.h |
| @@ -2,8 +2,8 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#ifndef CHROME_BROWSER_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_H_ |
| -#define CHROME_BROWSER_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_H_ |
| +#ifndef COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_BASE_H_ |
| +#define COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_BASE_H_ |
| #include <map> |
| #include <string> |
| @@ -11,9 +11,6 @@ |
| #include "base/memory/scoped_ptr.h" |
| #include "base/observer_list.h" |
| #include "base/strings/string16.h" |
| -#include "chrome/browser/custom_handlers/protocol_handler_registry.h" |
| -#include "chrome/browser/extensions/context_menu_matcher.h" |
| -#include "chrome/browser/extensions/menu_manager.h" |
| #include "components/renderer_context_menu/context_menu_content_type.h" |
| #include "components/renderer_context_menu/render_view_context_menu_observer.h" |
| #include "components/renderer_context_menu/render_view_context_menu_proxy.h" |
| @@ -22,21 +19,11 @@ |
| #include "ui/base/models/simple_menu_model.h" |
| #include "ui/base/window_open_disposition.h" |
| -class PrintPreviewContextMenuObserver; |
| -class Profile; |
| -class SpellingMenuObserver; |
| -class SpellCheckerSubMenuObserver; |
| - |
| namespace content { |
| class RenderFrameHost; |
| class WebContents; |
| } |
| -namespace extensions { |
| -class Extension; |
| -class MenuItem; |
| -} |
| - |
| namespace gfx { |
| class Point; |
| } |
| @@ -46,8 +33,8 @@ struct WebMediaPlayerAction; |
| struct WebPluginAction; |
| } |
| -class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate, |
| - public RenderViewContextMenuProxy { |
| +class RenderViewContextMenuBase : public ui::SimpleMenuModel::Delegate, |
| + public RenderViewContextMenuProxy { |
| public: |
| // A delegate interface to communicate with the toolkit used by |
| // the embedder. |
| @@ -68,6 +55,8 @@ class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate, |
| static const size_t kMaxSelectionTextLength; |
| + static void SetContentCustomCommandIdRange(int first, int last); |
| + |
| // Convert a command ID so that it fits within the range for |
| // content context menu. |
| static int ConvertToContentCustomCommandId(int id); |
| @@ -75,10 +64,10 @@ class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate, |
| // True if the given id is the one generated for content context menu. |
| static bool IsContentCustomCommandId(int id); |
| - RenderViewContextMenu(content::RenderFrameHost* render_frame_host, |
| - const content::ContextMenuParams& params); |
| + RenderViewContextMenuBase(content::RenderFrameHost* render_frame_host, |
| + const content::ContextMenuParams& params); |
| - virtual ~RenderViewContextMenu(); |
| + virtual ~RenderViewContextMenuBase(); |
| // Initializes the context menu. |
| void Init(); |
| @@ -114,6 +103,13 @@ class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate, |
| virtual content::BrowserContext* GetBrowserContext() const OVERRIDE; |
| protected: |
| + friend class RenderViewContextMenuTest; |
| + friend class RenderViewContextMenuPrefsTest; |
| + |
| + void set_content_type(ContextMenuContentType* content_type) { |
| + content_type_.reset(content_type); |
| + } |
| + |
| void set_toolkit_delegate(scoped_ptr<ToolkitDelegate> delegate) { |
| toolkit_delegate_ = delegate.Pass(); |
| } |
| @@ -122,114 +118,49 @@ class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate, |
| return toolkit_delegate_.get(); |
| } |
| - void InitMenu(); |
| - Profile* GetProfile(); |
| + // TODO(oshima): Make these methods delegate. |
| + |
| + // Menu Construction. |
| + virtual void InitMenu(); |
| - // Platform specific functions. |
| + // Increments histogram value for used items specified by |id|. |
| + virtual void RecordUsedItem(int id) = 0; |
| + |
| + // Increments histogram value for visible context menu item specified by |id|. |
| + virtual void RecordShownItem(int id) = 0; |
| + |
| +#if defined(ENABLE_PLUGINS) |
| + virtual void HandleAuthorizeAllPlugins() = 0; |
| +#endif |
| + |
| + // Returns the accelerator for given |command_id|. |
| virtual bool GetAcceleratorForCommandId( |
| int command_id, |
| ui::Accelerator* accelerator) = 0; |
| - virtual void AppendPlatformEditableItems(); |
| - content::ContextMenuParams params_; |
| - content::WebContents* source_web_contents_; |
| - // The RenderFrameHost's IDs. |
| - int render_process_id_; |
| - int render_frame_id_; |
| - content::BrowserContext* browser_context_; |
| + // Subclasses should send notification. |
|
lazyboy
2014/08/01 20:15:54
Just noting as I don't have any concrete suggestio
oshima
2014/08/01 21:43:12
Notification should be replaced observer interface
|
| + virtual void NotifyMenuShown() = 0; |
| + virtual void NotifyURLOpened(const GURL& url, |
| + content::WebContents* new_contents) = 0; |
| - ui::SimpleMenuModel menu_model_; |
| - extensions::ContextMenuMatcher extension_items_; |
| + // TODO(oshima): Remove this. |
|
lazyboy
2014/08/01 20:15:54
Add a bit more context to this todo.
oshima
2014/08/01 21:43:11
Done.
|
| + virtual void AppendPlatformEditableItems() {} |
| - private: |
| - friend class RenderViewContextMenuTest; |
| - friend class RenderViewContextMenuPrefsTest; |
| + content::RenderFrameHost* GetRenderFrameHost(); |
| - static bool IsDevToolsURL(const GURL& url); |
| - static bool IsInternalResourcesURL(const GURL& url); |
| - static bool ExtensionContextAndPatternMatch( |
| - const content::ContextMenuParams& params, |
| - extensions::MenuItem::ContextList contexts, |
| - const extensions::URLPatternSet& target_url_patterns); |
| - static bool MenuItemMatchesParams(const content::ContextMenuParams& params, |
| - const extensions::MenuItem* item); |
| - |
| - // Gets the extension (if any) associated with the WebContents that we're in. |
| - const extensions::Extension* GetExtension() const; |
| - bool AppendCustomItems(); |
| - |
| - void AppendDeveloperItems(); |
| - void AppendDevtoolsForUnpackedExtensions(); |
| - void AppendLinkItems(); |
| - void AppendImageItems(); |
| - void AppendAudioItems(); |
| - void AppendCanvasItems(); |
| - void AppendVideoItems(); |
| - void AppendMediaItems(); |
| - void AppendPluginItems(); |
| - void AppendPageItems(); |
| - void AppendFrameItems(); |
| - void AppendCopyItem(); |
| - void AppendPrintItem(); |
| - void AppendEditableItems(); |
| - void AppendSearchProvider(); |
| - void AppendAllExtensionItems(); |
| - void AppendCurrentExtensionItems(); |
| - void AppendPrintPreviewItems(); |
| - void AppendSearchWebForImageItems(); |
| - void AppendSpellingSuggestionsSubMenu(); |
| - void AppendSpellcheckOptionsSubMenu(); |
| - void AppendProtocolHandlerSubMenu(); |
| + bool IsCustomItemChecked(int id) const; |
| + bool IsCustomItemEnabled(int id) const; |
| // Opens the specified URL string in a new tab. |
| void OpenURL(const GURL& url, const GURL& referrer, |
| WindowOpenDisposition disposition, |
| content::PageTransition transition); |
| - // Copy to the clipboard an image located at a point in the RenderView |
| - void CopyImageAt(int x, int y); |
| - |
| - // Get an image located at a point in the RenderView for search. |
| - void GetImageThumbnailForSearch(); |
| - |
| - // Launch the inspector targeting a point in the RenderView |
| - void Inspect(int x, int y); |
| - |
| - // Writes the specified text/url to the system clipboard |
| - void WriteURLToClipboard(const GURL& url); |
| - |
| - void MediaPlayerActionAt(const gfx::Point& location, |
| - const blink::WebMediaPlayerAction& action); |
| - void PluginActionAt(const gfx::Point& location, |
| - const blink::WebPluginAction& action); |
| - |
| - bool IsDevCommandEnabled(int id) const; |
| - |
| - // Returns a list of registered ProtocolHandlers that can handle the clicked |
| - // on URL. |
| - ProtocolHandlerRegistry::ProtocolHandlerList GetHandlersForLinkUrl(); |
| - |
| - // Returns a (possibly truncated) version of the current selection text |
| - // suitable or putting in the title of a menu item. |
| - base::string16 PrintableSelectionText(); |
| - |
| - // The destination URL to use if the user tries to search for or navigate to |
| - // a text selection. |
| - GURL selection_navigation_url_; |
| - |
| - ui::SimpleMenuModel protocol_handler_submenu_model_; |
| - ProtocolHandlerRegistry* protocol_handler_registry_; |
| - |
| - // An observer that handles spelling-menu items. |
| - scoped_ptr<SpellingMenuObserver> spelling_menu_observer_; |
| - |
| - // An observer that handles a 'spell-checker options' submenu. |
| - scoped_ptr<SpellCheckerSubMenuObserver> spellchecker_submenu_observer_; |
| + content::ContextMenuParams params_; |
| + content::WebContents* source_web_contents_; |
| + content::BrowserContext* browser_context_; |
| -#if defined(ENABLE_FULL_PRINTING) |
| - // An observer that disables menu items when print preview is active. |
| - scoped_ptr<PrintPreviewContextMenuObserver> print_preview_menu_observer_; |
| -#endif |
| + ui::SimpleMenuModel menu_model_; |
| // Our observers. |
| mutable ObserverList<RenderViewContextMenuObserver> observers_; |
| @@ -240,9 +171,16 @@ class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate, |
| scoped_ptr<ContextMenuContentType> content_type_; |
| + private: |
| + bool AppendCustomItems(); |
| + |
| + // The RenderFrameHost's IDs. |
| + int render_process_id_; |
| + int render_frame_id_; |
| + |
| scoped_ptr<ToolkitDelegate> toolkit_delegate_; |
| - DISALLOW_COPY_AND_ASSIGN(RenderViewContextMenu); |
| + DISALLOW_COPY_AND_ASSIGN(RenderViewContextMenuBase); |
| }; |
| -#endif // CHROME_BROWSER_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_H_ |
| +#endif // COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_BASE_H_ |