render_frame.h revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/strings/string16.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/common/content_export.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ipc/ipc_listener.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ipc/ipc_sender.h" 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNavigationPolicy.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace blink { 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class WebFrame; 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebLocalFrame; 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WebNode; 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class WebPlugin; 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class WebURLRequest; 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class WebURLResponse; 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebPluginParams; 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace content { 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ContextMenuClient; 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderView; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ServiceRegistry; 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct ContextMenuParams; 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebPluginInfo; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct WebPreferences; 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This interface wraps functionality, which is specific to frames, such as 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// navigation. It provides communication with a corresponding RenderFrameHost 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// in the browser process. 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class CONTENT_EXPORT RenderFrame : public IPC::Listener, 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public IPC::Sender { 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public: 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the RenderFrame given a WebFrame. 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static RenderFrame* FromWebFrame(blink::WebFrame* web_frame); 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns the RenderView associated with this frame. 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual RenderView* GetRenderView() = 0; 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Get the routing ID of the frame. 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual int GetRoutingID() = 0; 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the associated WebFrame. 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual blink::WebFrame* GetWebFrame() = 0; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Gets WebKit related preferences associated with this frame. 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual WebPreferences& GetWebkitPreferences() = 0; 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Shows a context menu with the given information. The given client will 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // be called with the result. 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The request ID will be returned by this function. This is passed to the 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // client functions for identification. 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // If the client is destroyed, CancelContextMenu() should be called with the 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // request ID returned by this function. 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Note: if you end up having clients outliving the RenderFrame, we should add 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // a CancelContextMenuCallback function that takes a request id. 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual int ShowContextMenu(ContextMenuClient* client, 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const ContextMenuParams& params) = 0; 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Cancels a context menu in the event that the client is destroyed before the 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // menu is closed. 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void CancelContextMenu(int request_id) = 0; 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Gets the node that the context menu was pressed over. 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual blink::WebNode GetContextMenuNode() const = 0; 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Create a new NPAPI/Pepper plugin depending on |info|. Returns NULL if no 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // plugin was found. 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual blink::WebPlugin* CreatePlugin( 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) blink::WebFrame* frame, 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const WebPluginInfo& info, 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const blink::WebPluginParams& params) = 0; 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The client should handle the navigation externally. 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void LoadURLExternally(blink::WebLocalFrame* frame, 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const blink::WebURLRequest& request, 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch blink::WebNavigationPolicy policy) = 0; 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Execute a string of JavaScript in this frame's context. 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void ExecuteJavaScript(const base::string16& javascript) = 0; 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Return true if this frame is hidden. 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsHidden() = 0; 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the ServiceRegistry for this frame. 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ServiceRegistry* GetServiceRegistry() = 0; 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns true if this frame is a FTP directory listing. 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual bool IsFTPDirectoryListing() = 0; 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Attaches the browser plugin identified by |element_instance_id| to guest 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // content created by the embedder. 10003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void AttachGuest(int element_instance_id) = 0; 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected: 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~RenderFrame() {} 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // This interface should only be implemented inside content. 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) friend class RenderFrameImpl; 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RenderFrame() {} 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace content 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ 114