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.
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual blink::WebLocalFrame* 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