Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_BROWSER_WEBUI_WEB_UI_H_ | 5 #ifndef CONTENT_BROWSER_WEBUI_WEB_UI_H_ |
| 6 #define CONTENT_BROWSER_WEBUI_WEB_UI_H_ | 6 #define CONTENT_BROWSER_WEBUI_WEB_UI_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 class WebUIMessageHandler; | 31 class WebUIMessageHandler; |
| 32 } | 32 } |
| 33 | 33 |
| 34 // A WebUI sets up the datasources and message handlers for a given HTML-based | 34 // A WebUI sets up the datasources and message handlers for a given HTML-based |
| 35 // UI. | 35 // UI. |
| 36 // | 36 // |
| 37 // NOTE: If you're creating a new WebUI for Chrome code, make sure you extend | 37 // NOTE: If you're creating a new WebUI for Chrome code, make sure you extend |
| 38 // ChromeWebUI. | 38 // ChromeWebUI. |
| 39 class CONTENT_EXPORT WebUI : public IPC::Channel::Listener { | 39 class CONTENT_EXPORT WebUI : public IPC::Channel::Listener { |
| 40 public: | 40 public: |
| 41 WebUI(content::WebContents* contents, content::WebUIController* controller); | 41 explicit WebUI(content::WebContents* contents); |
| 42 virtual ~WebUI(); | 42 virtual ~WebUI(); |
| 43 | 43 |
| 44 // IPC::Channel::Listener implementation: | 44 // IPC::Channel::Listener implementation: |
| 45 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | 45 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| 46 // TODO(jam): move to private | 46 // TODO(jam): move to private |
| 47 // IPC message handling. | 47 // IPC message handling. |
| 48 void OnWebUISend(const GURL& source_url, | 48 void OnWebUISend(const GURL& source_url, |
| 49 const std::string& message, | 49 const std::string& message, |
| 50 const base::ListValue& args); | 50 const base::ListValue& args); |
| 51 | 51 |
| 52 // Called by TabContents when the RenderView is first created. This is *not* | 52 // Called by TabContents when the RenderView is first created. This is *not* |
| 53 // called for every page load because in some cases RenderViewHostManager will | 53 // called for every page load because in some cases RenderViewHostManager will |
| 54 // reuse RenderView instances. | 54 // reuse RenderView instances. |
| 55 void RenderViewCreated(RenderViewHost* render_view_host); | 55 void RenderViewCreated(RenderViewHost* render_view_host); |
| 56 | 56 |
| 57 // TODO(jam): below is what will be the public API of WebUI | |
| 58 content::WebContents* GetWebContents() const; | |
| 59 | |
| 60 // Returns true if the favicon should be hidden for the current tab. | |
| 61 bool ShouldHideFavicon() const; | |
| 62 void HideFavicon(); | |
| 63 | |
| 64 // Returns true if the location bar should be focused by default rather than | |
| 65 // the page contents. Some pages will want to use this to encourage the user | |
| 66 // to type in the URL bar. | |
| 67 bool ShouldFocusLocationBarByDefault() const; | |
| 68 void FocusLocationBarByDefault(); | |
| 69 | |
| 70 // Returns true if the page's URL should be hidden. Some Web UI pages | |
| 71 // like the new tab page will want to hide it. | |
| 72 bool ShouldHideURL() const; | |
| 73 void HideURL(); | |
| 74 | |
| 75 // Gets a custom tab title provided by the Web UI. If there is no title | |
| 76 // override, the string will be empty which should trigger the default title | |
| 77 // behavior for the tab. | |
| 78 const string16& GetOverriddenTitle() const; | |
| 79 void OverrideTitle(const string16& title); | |
| 80 | |
| 81 // Returns the transition type that should be used for link clicks on this | |
| 82 // Web UI. This will default to LINK but may be overridden. | |
| 83 content::PageTransition GetLinkTransitionType() const; | |
|
Evan Stade
2012/01/17 19:14:56
c-style getters and setters are not used in the co
jam
2012/01/17 19:20:45
right, because the API will be interfaces, so c-st
| |
| 84 void SetLinkTransitionType(content::PageTransition type); | |
| 85 | |
| 86 // Allows a controller to override the BindingsPolicy that should be enabled | |
| 87 // for this page. | |
| 88 int GetBindings() const; | |
| 89 void SetBindings(int bindings); | |
| 90 | |
| 91 // Sets the path for the iframe if this WebUI is embedded in a page. | |
| 92 void SetFrameXPath(const std::string& xpath); | |
| 93 | |
| 94 // Takes ownership of |handler|, which will be destroyed when the WebUI is. | |
| 95 void AddMessageHandler(content::WebUIMessageHandler* handler); | |
| 96 | |
| 97 // Execute a string of raw Javascript on the page. Overridable for | |
| 98 // testing purposes. | |
| 99 virtual void ExecuteJavascript(const string16& javascript); | |
| 100 | |
| 57 // Used by WebUIMessageHandlers. If the given message is already registered, | 101 // Used by WebUIMessageHandlers. If the given message is already registered, |
| 58 // the call has no effect unless |register_callback_overwrites_| is set to | 102 // the call has no effect unless |register_callback_overwrites_| is set to |
| 59 // true. | 103 // true. |
| 60 typedef base::Callback<void(const base::ListValue*)> MessageCallback; | 104 typedef base::Callback<void(const base::ListValue*)> MessageCallback; |
| 61 void RegisterMessageCallback(const std::string& message, | 105 void RegisterMessageCallback(const std::string& message, |
| 62 const MessageCallback& callback); | 106 const MessageCallback& callback); |
| 63 | 107 |
| 64 // Returns true if the favicon should be hidden for the current tab. | |
| 65 bool hide_favicon() const { | |
| 66 return hide_favicon_; | |
| 67 } | |
| 68 | |
| 69 // Returns true if the location bar should be focused by default rather than | |
| 70 // the page contents. Some pages will want to use this to encourage the user | |
| 71 // to type in the URL bar. | |
| 72 bool focus_location_bar_by_default() const { | |
| 73 return focus_location_bar_by_default_; | |
| 74 } | |
| 75 | |
| 76 // Returns true if the page's URL should be hidden. Some Web UI pages | |
| 77 // like the new tab page will want to hide it. | |
| 78 bool should_hide_url() const { | |
| 79 return should_hide_url_; | |
| 80 } | |
| 81 | |
| 82 // Gets a custom tab title provided by the Web UI. If there is no title | |
| 83 // override, the string will be empty which should trigger the default title | |
| 84 // behavior for the tab. | |
| 85 const string16& overridden_title() const { | |
| 86 return overridden_title_; | |
| 87 } | |
| 88 | |
| 89 // Returns the transition type that should be used for link clicks on this | |
| 90 // Web UI. This will default to LINK but may be overridden. | |
| 91 content::PageTransition link_transition_type() const { | |
| 92 return link_transition_type_; | |
| 93 } | |
| 94 | |
| 95 int bindings() const { | |
| 96 return bindings_; | |
| 97 } | |
| 98 | |
| 99 // Indicates whether RegisterMessageCallback() will overwrite an existing | 108 // Indicates whether RegisterMessageCallback() will overwrite an existing |
| 100 // message callback mapping. Serves as the hook for test mocks. | 109 // message callback mapping. Serves as the hook for test mocks. |
| 101 bool register_callback_overwrites() const { | 110 bool register_callback_overwrites() const { |
| 102 return register_callback_overwrites_; | 111 return register_callback_overwrites_; |
| 103 } | 112 } |
| 104 | 113 |
| 105 void set_register_callback_overwrites(bool value) { | 114 void set_register_callback_overwrites(bool value) { |
| 106 register_callback_overwrites_ = value; | 115 register_callback_overwrites_ = value; |
| 107 } | 116 } |
| 108 | 117 |
| 109 void set_frame_xpath(const std::string& xpath) { | 118 content::WebUIController* GetController() const; |
| 110 frame_xpath_ = xpath; | 119 void SetController(content::WebUIController* controller); |
| 111 } | |
| 112 | |
| 113 content::WebUIController* controller() const { return controller_; } | |
| 114 | 120 |
| 115 // Call a Javascript function by sending its name and arguments down to | 121 // Call a Javascript function by sending its name and arguments down to |
| 116 // the renderer. This is asynchronous; there's no way to get the result | 122 // the renderer. This is asynchronous; there's no way to get the result |
| 117 // of the call, and should be thought of more like sending a message to | 123 // of the call, and should be thought of more like sending a message to |
| 118 // the page. | 124 // the page. |
| 119 // All function names in WebUI must consist of only ASCII characters. | 125 // All function names in WebUI must consist of only ASCII characters. |
| 120 // There are variants for calls with more arguments. | 126 // There are variants for calls with more arguments. |
| 121 void CallJavascriptFunction(const std::string& function_name); | 127 void CallJavascriptFunction(const std::string& function_name); |
| 122 void CallJavascriptFunction(const std::string& function_name, | 128 void CallJavascriptFunction(const std::string& function_name, |
| 123 const base::Value& arg); | 129 const base::Value& arg); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 145 // A special WebUI type that signifies that a given page would not use the | 151 // A special WebUI type that signifies that a given page would not use the |
| 146 // Web UI system. | 152 // Web UI system. |
| 147 static const TypeID kNoWebUI; | 153 static const TypeID kNoWebUI; |
| 148 | 154 |
| 149 // Returns JavaScript code that, when executed, calls the function specified | 155 // Returns JavaScript code that, when executed, calls the function specified |
| 150 // by |function_name| with the arguments specified in |arg_list|. | 156 // by |function_name| with the arguments specified in |arg_list|. |
| 151 static string16 GetJavascriptCall( | 157 static string16 GetJavascriptCall( |
| 152 const std::string& function_name, | 158 const std::string& function_name, |
| 153 const std::vector<const base::Value*>& arg_list); | 159 const std::vector<const base::Value*>& arg_list); |
| 154 | 160 |
| 155 protected: | 161 private: |
| 156 // Takes ownership of |handler|, which will be destroyed when the WebUI is. | 162 // A map of message name -> message handling callback. |
| 157 void AddMessageHandler(content::WebUIMessageHandler* handler); | 163 typedef std::map<std::string, MessageCallback> MessageCallbackMap; |
| 158 | 164 MessageCallbackMap message_callbacks_; |
| 159 // Execute a string of raw Javascript on the page. Overridable for | |
| 160 // testing purposes. | |
| 161 virtual void ExecuteJavascript(const string16& javascript); | |
| 162 | 165 |
| 163 // Options that may be overridden by individual Web UI implementations. The | 166 // Options that may be overridden by individual Web UI implementations. The |
| 164 // bool options default to false. See the public getters for more information. | 167 // bool options default to false. See the public getters for more information. |
| 165 bool hide_favicon_; | 168 bool hide_favicon_; |
| 166 bool focus_location_bar_by_default_; | 169 bool focus_location_bar_by_default_; |
| 167 bool should_hide_url_; | 170 bool should_hide_url_; |
| 168 string16 overridden_title_; // Defaults to empty string. | 171 string16 overridden_title_; // Defaults to empty string. |
| 169 content::PageTransition link_transition_type_; // Defaults to LINK. | 172 content::PageTransition link_transition_type_; // Defaults to LINK. |
| 170 int bindings_; // The bindings from BindingsPolicy that should be enabled for | 173 int bindings_; // The bindings from BindingsPolicy that should be enabled for |
| 171 // this page. | 174 // this page. |
| 172 | 175 |
| 173 // Used by test mocks. See the public getters for more information. | 176 // Used by test mocks. See the public getters for more information. |
| 174 bool register_callback_overwrites_; // Defaults to false. | 177 bool register_callback_overwrites_; // Defaults to false. |
| 175 | 178 |
| 176 // The WebUIMessageHandlers we own. | 179 // The WebUIMessageHandlers we own. |
| 177 std::vector<content::WebUIMessageHandler*> handlers_; | 180 std::vector<content::WebUIMessageHandler*> handlers_; |
| 178 | 181 |
| 179 // Non-owning pointer to the WebContents this WebUI is associated with. | 182 // Non-owning pointer to the WebContents this WebUI is associated with. |
| 180 content::WebContents* web_contents_; | 183 content::WebContents* web_contents_; |
| 181 | 184 |
| 182 // TODO(jam): once WebUI objects aren't also WebUIController, make one own the | |
| 183 // other. | |
| 184 content::WebUIController* controller_; | |
| 185 | |
| 186 private: | |
| 187 // A map of message name -> message handling callback. | |
| 188 typedef std::map<std::string, MessageCallback> MessageCallbackMap; | |
| 189 MessageCallbackMap message_callbacks_; | |
| 190 | |
| 191 // The path for the iframe this WebUI is embedded in (empty if not in an | 185 // The path for the iframe this WebUI is embedded in (empty if not in an |
| 192 // iframe). | 186 // iframe). |
| 193 std::string frame_xpath_; | 187 std::string frame_xpath_; |
| 194 | 188 |
| 189 scoped_ptr<content::WebUIController> controller_; | |
| 190 | |
| 195 DISALLOW_COPY_AND_ASSIGN(WebUI); | 191 DISALLOW_COPY_AND_ASSIGN(WebUI); |
| 196 }; | 192 }; |
| 197 | 193 |
| 198 #endif // CONTENT_BROWSER_WEBUI_WEB_UI_H_ | 194 #endif // CONTENT_BROWSER_WEBUI_WEB_UI_H_ |
| OLD | NEW |