Home | History | Annotate | Download | only in browser
      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_BROWSER_WEB_UI_H_
      6 #define CONTENT_PUBLIC_BROWSER_WEB_UI_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/callback.h"
     12 #include "base/strings/string16.h"
     13 #include "content/common/content_export.h"
     14 #include "content/public/common/page_transition_types.h"
     15 
     16 class GURL;
     17 
     18 namespace base {
     19 class ListValue;
     20 class Value;
     21 }
     22 
     23 namespace content {
     24 
     25 class WebContents;
     26 class WebUIController;
     27 class WebUIMessageHandler;
     28 
     29 // A WebUI sets up the datasources and message handlers for a given HTML-based
     30 // UI.
     31 class CONTENT_EXPORT WebUI {
     32  public:
     33   // An opaque identifier used to identify a WebUI. This can only be compared to
     34   // kNoWebUI or other WebUI types. See GetWebUIType.
     35   typedef void* TypeID;
     36 
     37   // A special WebUI type that signifies that a given page would not use the
     38   // Web UI system.
     39   static const TypeID kNoWebUI;
     40 
     41   // Returns JavaScript code that, when executed, calls the function specified
     42   // by |function_name| with the arguments specified in |arg_list|.
     43   static base::string16 GetJavascriptCall(
     44       const std::string& function_name,
     45       const std::vector<const base::Value*>& arg_list);
     46 
     47   virtual ~WebUI() {}
     48 
     49   virtual WebContents* GetWebContents() const = 0;
     50 
     51   virtual WebUIController* GetController() const = 0;
     52   virtual void SetController(WebUIController* controller) = 0;
     53 
     54   // Returns the device scale factor of the monitor that the renderer is on.
     55   // Whenever possible, WebUI should push resources with this scale factor to
     56   // Javascript.
     57   virtual float GetDeviceScaleFactor() const = 0;
     58 
     59   // Gets a custom tab title provided by the Web UI. If there is no title
     60   // override, the string will be empty which should trigger the default title
     61   // behavior for the tab.
     62   virtual const base::string16& GetOverriddenTitle() const = 0;
     63   virtual void OverrideTitle(const base::string16& title) = 0;
     64 
     65   // Returns the transition type that should be used for link clicks on this
     66   // Web UI. This will default to LINK but may be overridden.
     67   virtual PageTransition GetLinkTransitionType() const = 0;
     68   virtual void SetLinkTransitionType(PageTransition type) = 0;
     69 
     70   // Allows a controller to override the BindingsPolicy that should be enabled
     71   // for this page.
     72   virtual int GetBindings() const = 0;
     73   virtual void SetBindings(int bindings) = 0;
     74 
     75   // Overrides which frame gets JavaScript messages; this is useful if this
     76   // WebUI is embedded in a page. If no override is set, the main frame will
     77   // receive the JavaScript messages.
     78   virtual void OverrideJavaScriptFrame(const std::string& frame_name) = 0;
     79 
     80   // Takes ownership of |handler|, which will be destroyed when the WebUI is.
     81   virtual void AddMessageHandler(WebUIMessageHandler* handler) = 0;
     82 
     83   // Used by WebUIMessageHandlers. If the given message is already registered,
     84   // the call has no effect unless |register_callback_overwrites_| is set to
     85   // true.
     86   typedef base::Callback<void(const base::ListValue*)> MessageCallback;
     87   virtual void RegisterMessageCallback(const std::string& message,
     88                                        const MessageCallback& callback) = 0;
     89 
     90   // This is only needed if an embedder overrides handling of a WebUIMessage and
     91   // then later wants to undo that, or to route it to a different WebUI object.
     92   virtual void ProcessWebUIMessage(const GURL& source_url,
     93                                    const std::string& message,
     94                                    const base::ListValue& args) = 0;
     95 
     96   // Call a Javascript function by sending its name and arguments down to
     97   // the renderer.  This is asynchronous; there's no way to get the result
     98   // of the call, and should be thought of more like sending a message to
     99   // the page.
    100   // All function names in WebUI must consist of only ASCII characters.
    101   // There are variants for calls with more arguments.
    102   virtual void CallJavascriptFunction(const std::string& function_name) = 0;
    103   virtual void CallJavascriptFunction(const std::string& function_name,
    104                                       const base::Value& arg) = 0;
    105   virtual void CallJavascriptFunction(const std::string& function_name,
    106                                       const base::Value& arg1,
    107                                       const base::Value& arg2) = 0;
    108   virtual void CallJavascriptFunction(const std::string& function_name,
    109                                       const base::Value& arg1,
    110                                       const base::Value& arg2,
    111                                       const base::Value& arg3) = 0;
    112   virtual void CallJavascriptFunction(const std::string& function_name,
    113                                       const base::Value& arg1,
    114                                       const base::Value& arg2,
    115                                       const base::Value& arg3,
    116                                       const base::Value& arg4) = 0;
    117   virtual void CallJavascriptFunction(
    118       const std::string& function_name,
    119       const std::vector<const base::Value*>& args) = 0;
    120 };
    121 
    122 }  // namespace content
    123 
    124 #endif  // CONTENT_PUBLIC_BROWSER_WEB_UI_H_
    125