diff options
author | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-25 02:56:57 +0000 |
---|---|---|
committer | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-25 02:56:57 +0000 |
commit | 67fc03984940b07daa38970e6876fcec1fce0e8e (patch) | |
tree | cc4df6d037ecc5e0a479305856fa84137d62af93 /content/browser/webui/web_ui.h | |
parent | 31de2b56d10626c2328f43531931bc08348ebad2 (diff) | |
download | chromium_src-67fc03984940b07daa38970e6876fcec1fce0e8e.zip chromium_src-67fc03984940b07daa38970e6876fcec1fce0e8e.tar.gz chromium_src-67fc03984940b07daa38970e6876fcec1fce0e8e.tar.bz2 |
WebUI: Move the core files of WebUI from chrome/browser/webui to content/browser/webui.
BUG=59946
TEST=trybots
Review URL: http://codereview.chromium.org/6575054
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76020 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/webui/web_ui.h')
-rw-r--r-- | content/browser/webui/web_ui.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/content/browser/webui/web_ui.h b/content/browser/webui/web_ui.h new file mode 100644 index 0000000..0ff0b15 --- /dev/null +++ b/content/browser/webui/web_ui.h @@ -0,0 +1,221 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_BROWSER_WEBUI_WEB_UI_H_ +#define CONTENT_BROWSER_WEBUI_WEB_UI_H_ +#pragma once + +#include <map> +#include <string> +#include <vector> + +#include "base/callback.h" +#include "base/string16.h" +#include "chrome/common/page_transition_types.h" + +class DictionaryValue; +class WebUIMessageHandler; +class GURL; +class ListValue; +class Profile; +class RenderViewHost; +class TabContents; +class Value; +struct ViewHostMsg_DomMessage_Params; + +namespace ui { +class ThemeProvider; +} + +// A WebUI sets up the datasources and message handlers for a given HTML-based +// UI. It is contained by a WebUIManager. +class WebUI { + public: + explicit WebUI(TabContents* contents); + virtual ~WebUI(); + + // Called by RenderViewHost when the RenderView is first created. This is + // *not* called for every page load because in some cases + // RenderViewHostManager will reuse RenderView instances. In those cases, + // RenderViewReused will be called instead. + virtual void RenderViewCreated(RenderViewHost* render_view_host) {} + + // Called by RenderViewHostManager when a RenderView is reused to display a + // page. + virtual void RenderViewReused(RenderViewHost* render_view_host) {} + + // Called when this becomes the active WebUI instance for a re-used + // RenderView; this is the point at which this WebUI instance will receive + // DOM messages instead of the previous WebUI instance. + // + // If a WebUI instance has code that is usually triggered from a JavaScript + // onload handler, this should be overridden to check to see if the web page's + // DOM is still intact (e.g., due to a back/forward navigation that remains + // within the same page), and if so trigger that code manually since onload + // won't be run in that case. + virtual void DidBecomeActiveForReusedRenderView() {} + + // Called from TabContents. + virtual void ProcessWebUIMessage(const ViewHostMsg_DomMessage_Params& params); + + // Used by WebUIMessageHandlers. + typedef Callback1<const ListValue*>::Type MessageCallback; + void RegisterMessageCallback(const std::string& message, + MessageCallback* callback); + + // Returns true if the favicon should be hidden for the current tab. + bool hide_favicon() const { + return hide_favicon_; + } + + // Returns true if the bookmark bar should be forced to being visible, + // overriding the user's preference. + bool force_bookmark_bar_visible() const { + return force_bookmark_bar_visible_; + } + + // Returns true if the location bar should be focused by default rather than + // the page contents. Some pages will want to use this to encourage the user + // to type in the URL bar. + bool focus_location_bar_by_default() const { + return focus_location_bar_by_default_; + } + + // Returns true if the page's URL should be hidden. Some Web UI pages + // like the new tab page will want to hide it. + bool should_hide_url() const { + return should_hide_url_; + } + + // Gets a custom tab title provided by the Web UI. If there is no title + // override, the string will be empty which should trigger the default title + // behavior for the tab. + const string16& overridden_title() const { + return overridden_title_; + } + + // Returns the transition type that should be used for link clicks on this + // Web UI. This will default to LINK but may be overridden. + PageTransition::Type link_transition_type() const { + return link_transition_type_; + } + + int bindings() const { + return bindings_; + } + + // Indicates whether RegisterMessageCallback() will overwrite an existing + // message callback mapping. Serves as the hook for test mocks. + bool register_callback_overwrites() const { + return register_callback_overwrites_; + } + + void register_callback_overwrites(bool value) { + register_callback_overwrites_ = value; + } + + // Call a Javascript function by sending its name and arguments down to + // the renderer. This is asynchronous; there's no way to get the result + // of the call, and should be thought of more like sending a message to + // the page. + // There are variants for calls with more arguments. + void CallJavascriptFunction(const std::wstring& function_name); + void CallJavascriptFunction(const std::wstring& function_name, + const Value& arg); + void CallJavascriptFunction(const std::wstring& function_name, + const Value& arg1, + const Value& arg2); + void CallJavascriptFunction(const std::wstring& function_name, + const Value& arg1, + const Value& arg2, + const Value& arg3); + void CallJavascriptFunction(const std::wstring& function_name, + const Value& arg1, + const Value& arg2, + const Value& arg3, + const Value& arg4); + void CallJavascriptFunction(const std::wstring& function_name, + const std::vector<const Value*>& args); + + ui::ThemeProvider* GetThemeProvider() const; + + // May be overridden by WebUI's which do not have a tab contents. + virtual Profile* GetProfile() const; + + // May be overridden by WebUI's which do not have a tab contents. + virtual RenderViewHost* GetRenderViewHost() const; + + TabContents* tab_contents() const { return tab_contents_; } + + protected: + void AddMessageHandler(WebUIMessageHandler* handler); + + // Execute a string of raw Javascript on the page. Overridable for + // testing purposes. + virtual void ExecuteJavascript(const std::wstring& javascript); + + // Options that may be overridden by individual Web UI implementations. The + // bool options default to false. See the public getters for more information. + bool hide_favicon_; + bool force_bookmark_bar_visible_; + bool focus_location_bar_by_default_; + bool should_hide_url_; + string16 overridden_title_; // Defaults to empty string. + PageTransition::Type link_transition_type_; // Defaults to LINK. + int bindings_; // The bindings from BindingsPolicy that should be enabled for + // this page. + + // Used by test mocks. See the public getters for more information. + bool register_callback_overwrites_; // Defaults to false. + + // The WebUIMessageHandlers we own. + std::vector<WebUIMessageHandler*> handlers_; + + // Non-owning pointer to the TabContents this WebUI is associated with. + TabContents* tab_contents_; + + private: + // A map of message name -> message handling callback. + typedef std::map<std::string, MessageCallback*> MessageCallbackMap; + MessageCallbackMap message_callbacks_; + + DISALLOW_COPY_AND_ASSIGN(WebUI); +}; + +// Messages sent from the DOM are forwarded via the WebUI to handler +// classes. These objects are owned by WebUI and destroyed when the +// host is destroyed. +class WebUIMessageHandler { + public: + WebUIMessageHandler(); + virtual ~WebUIMessageHandler(); + + // Attaches |this| to |web_ui| in order to handle messages from it. Declared + // virtual so that subclasses can do special init work as soon as the web_ui + // is provided. Returns |this| for convenience. + virtual WebUIMessageHandler* Attach(WebUI* web_ui); + + protected: + // Adds "url" and "title" keys on incoming dictionary, setting title + // as the url as a fallback on empty title. + static void SetURLAndTitle(DictionaryValue* dictionary, + string16 title, + const GURL& gurl); + + // This is where subclasses specify which messages they'd like to handle. + virtual void RegisterMessages() = 0; + + // Extract an integer value from a list Value. + bool ExtractIntegerValue(const ListValue* value, int* out_int); + + // Extract a string value from a list Value. + std::wstring ExtractStringValue(const ListValue* value); + + WebUI* web_ui_; + + private: + DISALLOW_COPY_AND_ASSIGN(WebUIMessageHandler); +}; + +#endif // CONTENT_BROWSER_WEBUI_WEB_UI_H_ |