web_ui.h revision effb81e5f8246d0db0270817048dc992db66e9fb
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" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/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|. 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static base::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) // Gets a custom tab title provided by the Web UI. If there is no title 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // override, the string will be empty which should trigger the default title 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // behavior for the tab. 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual const base::string16& GetOverriddenTitle() const = 0; 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OverrideTitle(const base::string16& title) = 0; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the transition type that should be used for link clicks on this 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Web UI. This will default to LINK but may be overridden. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PageTransition GetLinkTransitionType() const = 0; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetLinkTransitionType(PageTransition type) = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows a controller to override the BindingsPolicy that should be enabled 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for this page. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetBindings() const = 0; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBindings(int bindings) = 0; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Overrides which frame gets JavaScript messages; this is useful if this 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // WebUI is embedded in a page. If no override is set, the main frame will 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // receive the JavaScript messages. 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void OverrideJavaScriptFrame(const std::string& frame_name) = 0; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Takes ownership of |handler|, which will be destroyed when the WebUI is. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddMessageHandler(WebUIMessageHandler* handler) = 0; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by WebUIMessageHandlers. If the given message is already registered, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the call has no effect unless |register_callback_overwrites_| is set to 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(const base::ListValue*)> MessageCallback; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterMessageCallback(const std::string& message, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MessageCallback& callback) = 0; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is only needed if an embedder overrides handling of a WebUIMessage and 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then later wants to undo that, or to route it to a different WebUI object. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ProcessWebUIMessage(const GURL& source_url, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& message, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue& args) = 0; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call a Javascript function by sending its name and arguments down to 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the renderer. This is asynchronous; there's no way to get the result 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of the call, and should be thought of more like sending a message to 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the page. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All function names in WebUI must consist of only ASCII characters. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are variants for calls with more arguments. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name) = 0; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg) = 0; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2) = 0; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg3) = 0; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg3, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg4) = 0; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction( 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& function_name, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<const base::Value*>& args) = 0; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_BROWSER_WEB_UI_H_ 126