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