render_frame.h revision 116680a4aac90f2aa7413d9095a592090648e557
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; 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebPluginParams; 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace content { 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ContextMenuClient; 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderView; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ServiceRegistry; 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct ContextMenuParams; 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebPluginInfo; 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct WebPreferences; 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This interface wraps functionality, which is specific to frames, such as 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// navigation. It provides communication with a corresponding RenderFrameHost 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// in the browser process. 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class CONTENT_EXPORT RenderFrame : public IPC::Listener, 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public IPC::Sender { 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public: 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the RenderFrame given a WebFrame. 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static RenderFrame* FromWebFrame(blink::WebFrame* web_frame); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns the RenderView associated with this frame. 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual RenderView* GetRenderView() = 0; 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Get the routing ID of the frame. 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual int GetRoutingID() = 0; 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns the associated WebFrame. 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual blink::WebFrame* GetWebFrame() = 0; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Gets WebKit related preferences associated with this frame. 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual WebPreferences& GetWebkitPreferences() = 0; 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Shows a context menu with the given information. The given client will 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // be called with the result. 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The request ID will be returned by this function. This is passed to the 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // client functions for identification. 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // If the client is destroyed, CancelContextMenu() should be called with the 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // request ID returned by this function. 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Note: if you end up having clients outliving the RenderFrame, we should add 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // a CancelContextMenuCallback function that takes a request id. 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual int ShowContextMenu(ContextMenuClient* client, 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const ContextMenuParams& params) = 0; 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Cancels a context menu in the event that the client is destroyed before the 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // menu is closed. 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void CancelContextMenu(int request_id) = 0; 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Gets the node that the context menu was pressed over. 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual blink::WebNode GetContextMenuNode() const = 0; 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Create a new NPAPI/Pepper plugin depending on |info|. Returns NULL if no 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // plugin was found. 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual blink::WebPlugin* CreatePlugin( 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) blink::WebFrame* frame, 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const WebPluginInfo& info, 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const blink::WebPluginParams& params) = 0; 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The client should handle the navigation externally. 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void LoadURLExternally(blink::WebLocalFrame* frame, 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const blink::WebURLRequest& request, 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch blink::WebNavigationPolicy policy) = 0; 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Execute a string of JavaScript in this frame's context. 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void ExecuteJavaScript(const base::string16& javascript) = 0; 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Return true if this frame is hidden. 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsHidden() = 0; 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the ServiceRegistry for this frame. 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ServiceRegistry* GetServiceRegistry() = 0; 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected: 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~RenderFrame() {} 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // This interface should only be implemented inside content. 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) friend class RenderFrameImpl; 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RenderFrame() {} 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace content 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ 106