render_frame.h revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
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)struct WebPreferences;
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace blink {
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class WebFrame;
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebLocalFrame;
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class WebNode;
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class WebPlugin;
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class WebURLRequest;
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebPluginParams;
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace content {
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ContextMenuClient;
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderView;
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct ContextMenuParams;
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct WebPluginInfo;
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)
91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected:
92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~RenderFrame() {}
93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // This interface should only be implemented inside content.
96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  friend class RenderFrameImpl;
97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RenderFrame() {}
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace content
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif  // CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_
103