| // Copyright 2014 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 COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_PROXY_H_ |
| #define COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_PROXY_H_ |
| |
| #include "base/strings/string16.h" |
| |
| namespace content { |
| class BrowserContext; |
| class RenderViewHost; |
| class WebContents; |
| } |
| |
| namespace gfx { |
| class Image; |
| } |
| |
| namespace ui { |
| class MenuModel; |
| } |
| |
| // An interface that controls a RenderViewContextMenu instance from observers. |
| // This interface is designed mainly for controlling the instance while showing |
| // so we can add a context-menu item that takes long time to create its text, |
| // such as retrieving the item text from a server. The simplest usage is: |
| // 1. Adding an item with temporary text; |
| // 2. Posting a background task that creates the item text, and; |
| // 3. Calling UpdateMenuItem() in the callback function. |
| // The following snippet describes the simple usage that updates a context-menu |
| // item with this interface. |
| // |
| // class MyTask : public net::URLFetcherDelegate { |
| // public: |
| // MyTask(RenderViewContextMenuProxy* proxy, int id) |
| // : proxy_(proxy), |
| // id_(id) { |
| // } |
| // virtual ~MyTask() { |
| // } |
| // virtual void OnURLFetchComplete(const net::URLFetcher* source, |
| // const GURL& url, |
| // const net::URLRequestStatus& status, |
| // int response, |
| // const net::ResponseCookies& cookies, |
| // const std::string& data) { |
| // bool enabled = response == 200; |
| // const char* text = enabled ? "OK" : "ERROR"; |
| // proxy_->UpdateMenuItem(id_, enabled, base::ASCIIToUTF16(text)); |
| // } |
| // void Start(const GURL* url, net::URLRequestContextGetter* context) { |
| // fetcher_.reset(new URLFetcher(url, URLFetcher::GET, this)); |
| // fetcher_->SetRequestContext(context); |
| // content::AssociateURLFetcherWithRenderView( |
| // fetcher_.get(), |
| // proxy_->GetRenderViewHost()->GetSiteInstance()->GetSite(), |
| // proxy_->GetRenderViewHost()->GetProcess()->GetID(), |
| // proxy_->GetRenderViewHost()->GetRoutingID()); |
| // fetcher_->Start(); |
| // } |
| // |
| // private: |
| // URLFetcher fetcher_; |
| // RenderViewContextMenuProxy* proxy_; |
| // int id_; |
| // }; |
| // |
| // void RenderViewContextMenu::AppendEditableItems() { |
| // // Add a menu item with temporary text shown while we create the final |
| // // text. |
| // menu_model_.AddItemWithStringId(IDC_MY_ITEM, IDC_MY_TEXT); |
| // |
| // // Start a task that creates the final text. |
| // my_task_ = new MyTask(this, IDC_MY_ITEM); |
| // my_task_->Start(...); |
| // } |
| // |
| class RenderViewContextMenuProxy { |
| public: |
| // Add a menu item to a context menu. |
| virtual void AddMenuItem(int command_id, const base::string16& title) = 0; |
| virtual void AddCheckItem(int command_id, const base::string16& title) = 0; |
| virtual void AddSeparator() = 0; |
| |
| // Add a submenu item to a context menu. |
| virtual void AddSubMenu(int command_id, |
| const base::string16& label, |
| ui::MenuModel* model) = 0; |
| |
| // Update the status and text of the specified context-menu item. |
| virtual void UpdateMenuItem(int command_id, |
| bool enabled, |
| bool hidden, |
| const base::string16& title) = 0; |
| |
| // Update the icon of the specified context-menu item. |
| virtual void UpdateMenuIcon(int command_id, const gfx::Image& image) = 0; |
| |
| // Add spell check service item to the context menu. |
| virtual void AddSpellCheckServiceItem(bool is_checked) = 0; |
| |
| // Retrieve the given associated objects with a context menu. |
| virtual content::RenderViewHost* GetRenderViewHost() const = 0; |
| virtual content::WebContents* GetWebContents() const = 0; |
| virtual content::BrowserContext* GetBrowserContext() const = 0; |
| }; |
| |
| #endif // COMPONENTS_RENDERER_CONTEXT_MENU_RENDER_VIEW_CONTEXT_MENU_PROXY_H_ |