Popular sites on the NTP: Try to keep the ordering constant
[chromium-blink-merge.git] / content / public / browser / web_ui.h
blob8568530c7dbe779d678de6f0c89e52ef8cef5647
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.
5 #ifndef CONTENT_PUBLIC_BROWSER_WEB_UI_H_
6 #define CONTENT_PUBLIC_BROWSER_WEB_UI_H_
8 #include <vector>
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 "ui/base/page_transition_types.h"
16 class GURL;
18 namespace base {
19 class ListValue;
20 class Value;
23 namespace content {
25 class WebContents;
26 class WebUIController;
27 class WebUIMessageHandler;
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;
37 // A special WebUI type that signifies that a given page would not use the
38 // Web UI system.
39 static const TypeID kNoWebUI;
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);
47 virtual ~WebUI() {}
49 virtual WebContents* GetWebContents() const = 0;
51 virtual WebUIController* GetController() const = 0;
52 virtual void SetController(WebUIController* controller) = 0;
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;
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;
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 ui::PageTransition GetLinkTransitionType() const = 0;
68 virtual void SetLinkTransitionType(ui::PageTransition type) = 0;
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;
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;
80 // Takes ownership of |handler|, which will be destroyed when the WebUI is.
81 virtual void AddMessageHandler(WebUIMessageHandler* handler) = 0;
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;
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;
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;
122 } // namespace content
124 #endif // CONTENT_PUBLIC_BROWSER_WEB_UI_H_