Home | History | Annotate | Download | only in renderer
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_PUBLIC_RENDERER_RENDER_VIEW_H_
      6 #define CONTENT_PUBLIC_RENDERER_RENDER_VIEW_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/strings/string16.h"
     10 #include "content/common/content_export.h"
     11 #include "content/public/common/top_controls_state.h"
     12 #include "ipc/ipc_sender.h"
     13 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
     14 #include "third_party/WebKit/public/web/WebPageVisibilityState.h"
     15 #include "ui/gfx/native_widget_types.h"
     16 
     17 struct WebPreferences;
     18 
     19 namespace WebKit {
     20 class WebFrame;
     21 class WebNode;
     22 class WebPlugin;
     23 class WebString;
     24 class WebURLRequest;
     25 class WebView;
     26 struct WebContextMenuData;
     27 struct WebPluginParams;
     28 }
     29 
     30 namespace gfx {
     31 class Size;
     32 }
     33 
     34 namespace content {
     35 
     36 class ContextMenuClient;
     37 class RenderViewVisitor;
     38 struct ContextMenuParams;
     39 struct SSLStatus;
     40 struct WebPluginInfo;
     41 
     42 class CONTENT_EXPORT RenderView : public IPC::Sender {
     43  public:
     44   // Returns the RenderView containing the given WebView.
     45   static RenderView* FromWebView(WebKit::WebView* webview);
     46 
     47   // Returns the RenderView for the given routing ID.
     48   static RenderView* FromRoutingID(int routing_id);
     49 
     50   // Visit all RenderViews with a live WebView (i.e., RenderViews that have
     51   // been closed but not yet destroyed are excluded).
     52   static void ForEach(RenderViewVisitor* visitor);
     53 
     54   // Get the routing ID of the view.
     55   virtual int GetRoutingID() const = 0;
     56 
     57   // Page IDs allow the browser to identify pages in each renderer process for
     58   // keeping back/forward history in sync.
     59   // Note that this is NOT updated for every main frame navigation, only for
     60   // "regular" navigations that go into session history. In particular, client
     61   // redirects, like the page cycler uses (document.location.href="foo") do not
     62   // count as regular navigations and do not increment the page id.
     63   virtual int GetPageId() const = 0;
     64 
     65   // Returns the size of the view.
     66   virtual gfx::Size GetSize() const = 0;
     67 
     68   // Gets WebKit related preferences associated with this view.
     69   virtual WebPreferences& GetWebkitPreferences() = 0;
     70 
     71   // Overrides the WebKit related preferences associated with this view. Note
     72   // that the browser process may update the preferences at any time.
     73   virtual void SetWebkitPreferences(const WebPreferences& preferences) = 0;
     74 
     75   // Returns the associated WebView. May return NULL when the view is closing.
     76   virtual WebKit::WebView* GetWebView() = 0;
     77 
     78   // Gets the focused node. If no such node exists then the node will be isNull.
     79   virtual WebKit::WebNode GetFocusedNode() const = 0;
     80 
     81   // Gets the node that the context menu was pressed over.
     82   virtual WebKit::WebNode GetContextMenuNode() const = 0;
     83 
     84   // Returns true if the parameter node is a textfield, text area, a content
     85   // editable div, or has an ARIA role of textbox.
     86   virtual bool IsEditableNode(const WebKit::WebNode& node) const = 0;
     87 
     88   // Create a new NPAPI/Pepper plugin depending on |info|. Returns NULL if no
     89   // plugin was found.
     90   virtual WebKit::WebPlugin* CreatePlugin(
     91       WebKit::WebFrame* frame,
     92       const WebPluginInfo& info,
     93       const WebKit::WebPluginParams& params) = 0;
     94 
     95   // Evaluates a string of JavaScript in a particular frame.
     96   virtual void EvaluateScript(const string16& frame_xpath,
     97                               const string16& jscript,
     98                               int id,
     99                               bool notify_result) = 0;
    100 
    101   // Returns true if we should display scrollbars for the given view size and
    102   // false if the scrollbars should be hidden.
    103   virtual bool ShouldDisplayScrollbars(int width, int height) const = 0;
    104 
    105   // Bitwise-ORed set of extra bindings that have been enabled.  See
    106   // BindingsPolicy for details.
    107   virtual int GetEnabledBindings() const = 0;
    108 
    109   // Whether content state (such as form state, scroll position and page
    110   // contents) should be sent to the browser immediately. This is normally
    111   // false, but set to true by some tests.
    112   virtual bool GetContentStateImmediately() const = 0;
    113 
    114   // Filtered time per frame based on UpdateRect messages.
    115   virtual float GetFilteredTimePerFrame() const = 0;
    116 
    117   // Shows a context menu with the given information. The given client will
    118   // be called with the result.
    119   //
    120   // The request ID will be returned by this function. This is passed to the
    121   // client functions for identification.
    122   //
    123   // If the client is destroyed, CancelContextMenu() should be called with the
    124   // request ID returned by this function.
    125   //
    126   // Note: if you end up having clients outliving the RenderView, we should add
    127   // a CancelContextMenuCallback function that takes a request id.
    128   virtual int ShowContextMenu(ContextMenuClient* client,
    129                               const ContextMenuParams& params) = 0;
    130 
    131   // Cancels a context menu in the event that the client is destroyed before the
    132   // menu is closed.
    133   virtual void CancelContextMenu(int request_id) = 0;
    134 
    135   // Returns the current visibility of the WebView.
    136   virtual WebKit::WebPageVisibilityState GetVisibilityState() const = 0;
    137 
    138   // Displays a modal alert dialog containing the given message.  Returns
    139   // once the user dismisses the dialog.
    140   virtual void RunModalAlertDialog(WebKit::WebFrame* frame,
    141                                    const WebKit::WebString& message) = 0;
    142 
    143   // The client should handle the navigation externally.
    144   virtual void LoadURLExternally(
    145       WebKit::WebFrame* frame,
    146       const WebKit::WebURLRequest& request,
    147       WebKit::WebNavigationPolicy policy) = 0;
    148 
    149   // Used by plugins that load data in this RenderView to update the loading
    150   // notifications.
    151   virtual void DidStartLoading() = 0;
    152   virtual void DidStopLoading() = 0;
    153 
    154   // Notifies the renderer that a paint is to be generated for the size
    155   // passed in.
    156   virtual void Repaint(const gfx::Size& size) = 0;
    157 
    158   // Inject edit commands to be used for the next keyboard event.
    159   virtual void SetEditCommandForNextKeyEvent(const std::string& name,
    160                                              const std::string& value) = 0;
    161   virtual void ClearEditCommands() = 0;
    162 
    163   // Returns a collection of security info about |frame|.
    164   virtual SSLStatus GetSSLStatusOfFrame(WebKit::WebFrame* frame) const = 0;
    165 
    166 #if defined(OS_ANDROID)
    167   virtual void UpdateTopControlsState(TopControlsState constraints,
    168                                       TopControlsState current,
    169                                       bool animate) = 0;
    170 #endif
    171 
    172  protected:
    173   virtual ~RenderView() {}
    174 
    175  private:
    176   // This interface should only be implemented inside content.
    177   friend class RenderViewImpl;
    178   RenderView() {}
    179 };
    180 
    181 }  // namespace content
    182 
    183 #endif  // CONTENT_PUBLIC_RENDERER_RENDER_VIEW_H_
    184