render_frame.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Copyright 2013 The Chromium Authors. All rights reserved. 236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Use of this source code is governed by a BSD-style license that can be 336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// found in the LICENSE file. 436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#ifndef CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ 636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#define CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ 736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "base/strings/string16.h" 936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "content/common/content_export.h" 1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "ipc/ipc_listener.h" 1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "ipc/ipc_sender.h" 1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "third_party/WebKit/public/web/WebNavigationPolicy.h" 1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct WebPreferences; 1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace blink { 1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass WebFrame; 1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass WebLocalFrame; 1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass WebNode; 2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass WebPlugin; 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass WebURLRequest; 2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct WebPluginParams; 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace content { 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass ContextMenuClient; 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass RenderView; 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct ContextMenuParams; 2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesstruct WebPluginInfo; 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This interface wraps functionality, which is specific to frames, such as 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// navigation. It provides communication with a corresponding RenderFrameHost 3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// in the browser process. 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass CONTENT_EXPORT RenderFrame : public IPC::Listener, 3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public IPC::Sender { 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines public: 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Returns the RenderFrame given a WebFrame. 3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines static RenderFrame* FromWebFrame(blink::WebFrame* web_frame); 3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Returns the RenderView associated with this frame. 4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual RenderView* GetRenderView() = 0; 4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Get the routing ID of the frame. 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual int GetRoutingID() = 0; 4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Returns the associated WebFrame. 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual blink::WebFrame* GetWebFrame() = 0; 4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Gets WebKit related preferences associated with this frame. 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual WebPreferences& GetWebkitPreferences() = 0; 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Shows a context menu with the given information. The given client will 5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // be called with the result. 5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // 5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // The request ID will be returned by this function. This is passed to the 5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // client functions for identification. 5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // 5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // If the client is destroyed, CancelContextMenu() should be called with the 5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // request ID returned by this function. 6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Note: if you end up having clients outliving the RenderFrame, we should add 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // a CancelContextMenuCallback function that takes a request id. 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual int ShowContextMenu(ContextMenuClient* client, 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const ContextMenuParams& params) = 0; 6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Cancels a context menu in the event that the client is destroyed before the 6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // menu is closed. 6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void CancelContextMenu(int request_id) = 0; 6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Gets the node that the context menu was pressed over. 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual blink::WebNode GetContextMenuNode() const = 0; 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Create a new NPAPI/Pepper plugin depending on |info|. Returns NULL if no 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // plugin was found. 7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual blink::WebPlugin* CreatePlugin( 7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines blink::WebFrame* frame, 7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const WebPluginInfo& info, 7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const blink::WebPluginParams& params) = 0; 7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // The client should handle the navigation externally. 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void LoadURLExternally(blink::WebLocalFrame* frame, 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const blink::WebURLRequest& request, 8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines blink::WebNavigationPolicy policy) = 0; 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // Execute a string of JavaScript in this frame's context. 8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual void ExecuteJavaScript(const base::string16& javascript) = 0; 8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines protected: 8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines virtual ~RenderFrame() {} 9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines private: 9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines // This interface should only be implemented inside content. 9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines friend class RenderFrameImpl; 9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines RenderFrame() {} 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}; 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // namespace content 9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif // CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ 10036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines