// Copyright (c) 2011 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. #ifndef CHROME_BROWSER_TAB_CONTENTS_RENDER_VIEW_CONTEXT_MENU_H_ #define CHROME_BROWSER_TAB_CONTENTS_RENDER_VIEW_CONTEXT_MENU_H_ #pragma once #include <map> #include <string> #include <vector> #include "base/memory/scoped_vector.h" #include "base/string16.h" #include "chrome/browser/extensions/extension_menu_manager.h" #include "content/common/page_transition_types.h" #include "ui/base/models/simple_menu_model.h" #include "webkit/glue/context_menu.h" #include "webkit/glue/window_open_disposition.h" class ExtensionMenuItem; class Profile; class TabContents; namespace gfx { class Point; } namespace WebKit { struct WebMediaPlayerAction; } class RenderViewContextMenu : public ui::SimpleMenuModel::Delegate { public: static const size_t kMaxExtensionItemTitleLength; static const size_t kMaxSelectionTextLength; RenderViewContextMenu(TabContents* tab_contents, const ContextMenuParams& params); virtual ~RenderViewContextMenu(); // Initializes the context menu. void Init(); // SimpleMenuModel::Delegate implementation. virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; virtual void ExecuteCommand(int command_id) OVERRIDE; virtual void MenuWillShow() OVERRIDE; virtual void MenuClosed() OVERRIDE; protected: void InitMenu(); // Platform specific functions. virtual void PlatformInit() = 0; virtual bool GetAcceleratorForCommandId( int command_id, ui::Accelerator* accelerator) = 0; virtual void LookUpInDictionary(); // Attempts to get an ExtensionMenuItem given the id of a context menu item. ExtensionMenuItem* GetExtensionMenuItem(int id) const; ContextMenuParams params_; TabContents* source_tab_contents_; Profile* profile_; ui::SimpleMenuModel menu_model_; // True if we are showing for an external tab contents. The default is false. bool external_; // Maps the id from a context menu item to the ExtensionMenuItem's internal // id. std::map<int, ExtensionMenuItem::Id> extension_item_map_; private: static bool IsDevToolsURL(const GURL& url); static bool IsInternalResourcesURL(const GURL& url); bool AppendCustomItems(); void AppendDeveloperItems(); void AppendLinkItems(); void AppendImageItems(); void AppendAudioItems(); void AppendVideoItems(); void AppendMediaItems(); void AppendPluginItems(); void AppendPageItems(); void AppendFrameItems(); void AppendCopyItem(); void AppendEditableItems(); void AppendSearchProvider(); void AppendAllExtensionItems(); void AppendSpellcheckOptionsSubMenu(); // Add writing direction sub menu (only used on Mac). void AppendBidiSubMenu(); // This is a helper function to append items for one particular extension. // The |index| parameter is used for assigning id's, and is incremented for // each item actually added. void AppendExtensionItems(const std::string& extension_id, int* index); // Used for recursively adding submenus of extension items. void RecursivelyAppendExtensionItems( const std::vector<ExtensionMenuItem*>& items, bool can_cross_incognito, ui::SimpleMenuModel* menu_model, int *index); // This will set the icon on the most recently-added item in the menu_model_. void SetExtensionIcon(const std::string& extension_id); // Opens the specified URL string in a new tab. If |in_current_window| is // false, a new window is created to hold the new tab. void OpenURL(const GURL& url, WindowOpenDisposition disposition, PageTransition::Type transition); // Copy to the clipboard an image located at a point in the RenderView void CopyImageAt(int x, int y); // 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 WebKit::WebMediaPlayerAction& action); bool IsDevCommandEnabled(int id) const; // Returns a (possibly truncated) version of the current selection text // suitable or putting in the title of a menu item. 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 spellcheck_submenu_model_; ui::SimpleMenuModel bidi_submenu_model_; ScopedVector<ui::SimpleMenuModel> extension_menu_models_; DISALLOW_COPY_AND_ASSIGN(RenderViewContextMenu); }; #endif // CHROME_BROWSER_TAB_CONTENTS_RENDER_VIEW_CONTEXT_MENU_H_