web_ui.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_BROWSER_WEB_UI_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_WEB_UI_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/layout.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListValue; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIController; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIMessageHandler; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A WebUI sets up the datasources and message handlers for a given HTML-based 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UI. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT WebUI { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An opaque identifier used to identify a WebUI. This can only be compared to 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // kNoWebUI or other WebUI types. See GetWebUIType. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef void* TypeID; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A special WebUI type that signifies that a given page would not use the 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Web UI system. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const TypeID kNoWebUI; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns JavaScript code that, when executed, calls the function specified 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by |function_name| with the arguments specified in |arg_list|. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static string16 GetJavascriptCall( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& function_name, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<const base::Value*>& arg_list); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebUI() {} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* GetWebContents() const = 0; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebUIController* GetController() const = 0; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetController(WebUIController* controller) = 0; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the device scale factor of the monitor that the renderer is on. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whenever possible, WebUI should push resources with this scale factor to 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Javascript. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::ScaleFactor GetDeviceScaleFactor() const = 0; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the favicon should be hidden for the current tab. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldHideFavicon() const = 0; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void HideFavicon() = 0; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the location bar should be focused by default rather than 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the page contents. Some pages will want to use this to encourage the user 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to type in the URL bar. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldFocusLocationBarByDefault() const = 0; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void FocusLocationBarByDefault() = 0; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the page's URL should be hidden. Some Web UI pages 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // like the new tab page will want to hide it. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldHideURL() const = 0; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void HideURL() = 0; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets a custom tab title provided by the Web UI. If there is no title 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // override, the string will be empty which should trigger the default title 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // behavior for the tab. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const string16& GetOverriddenTitle() const = 0; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OverrideTitle(const string16& title) = 0; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the transition type that should be used for link clicks on this 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Web UI. This will default to LINK but may be overridden. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PageTransition GetLinkTransitionType() const = 0; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetLinkTransitionType(PageTransition type) = 0; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows a controller to override the BindingsPolicy that should be enabled 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for this page. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetBindings() const = 0; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBindings(int bindings) = 0; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the path for the iframe if this WebUI is embedded in a page. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetFrameXPath(const std::string& xpath) = 0; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Takes ownership of |handler|, which will be destroyed when the WebUI is. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddMessageHandler(WebUIMessageHandler* handler) = 0; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by WebUIMessageHandlers. If the given message is already registered, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the call has no effect unless |register_callback_overwrites_| is set to 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(const base::ListValue*)> MessageCallback; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterMessageCallback(const std::string& message, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MessageCallback& callback) = 0; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is only needed if an embedder overrides handling of a WebUIMessage and 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then later wants to undo that, or to route it to a different WebUI object. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ProcessWebUIMessage(const GURL& source_url, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& message, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue& args) = 0; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call a Javascript function by sending its name and arguments down to 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the renderer. This is asynchronous; there's no way to get the result 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of the call, and should be thought of more like sending a message to 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the page. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All function names in WebUI must consist of only ASCII characters. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are variants for calls with more arguments. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name) = 0; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg) = 0; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2) = 0; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg3) = 0; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg3, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg4) = 0; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction( 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& function_name, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<const base::Value*>& args) = 0; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_BROWSER_WEB_UI_H_ 139