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