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" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/page_transition_types.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListValue; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIController; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUIMessageHandler; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A WebUI sets up the datasources and message handlers for a given HTML-based 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UI. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT WebUI { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An opaque identifier used to identify a WebUI. This can only be compared to 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // kNoWebUI or other WebUI types. See GetWebUIType. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef void* TypeID; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A special WebUI type that signifies that a given page would not use the 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Web UI system. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const TypeID kNoWebUI; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns JavaScript code that, when executed, calls the function specified 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by |function_name| with the arguments specified in |arg_list|. 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static base::string16 GetJavascriptCall( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& function_name, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<const base::Value*>& arg_list); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~WebUI() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* GetWebContents() const = 0; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebUIController* GetController() const = 0; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetController(WebUIController* controller) = 0; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the device scale factor of the monitor that the renderer is on. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whenever possible, WebUI should push resources with this scale factor to 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Javascript. 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual float GetDeviceScaleFactor() const = 0; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets a custom tab title provided by the Web UI. If there is no title 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // override, the string will be empty which should trigger the default title 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // behavior for the tab. 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual const base::string16& GetOverriddenTitle() const = 0; 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OverrideTitle(const base::string16& title) = 0; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the transition type that should be used for link clicks on this 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Web UI. This will default to LINK but may be overridden. 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ui::PageTransition GetLinkTransitionType() const = 0; 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetLinkTransitionType(ui::PageTransition type) = 0; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows a controller to override the BindingsPolicy that should be enabled 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for this page. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetBindings() const = 0; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBindings(int bindings) = 0; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Overrides which frame gets JavaScript messages; this is useful if this 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // WebUI is embedded in a page. If no override is set, the main frame will 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // receive the JavaScript messages. 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void OverrideJavaScriptFrame(const std::string& frame_name) = 0; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Takes ownership of |handler|, which will be destroyed when the WebUI is. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddMessageHandler(WebUIMessageHandler* handler) = 0; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by WebUIMessageHandlers. If the given message is already registered, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the call has no effect unless |register_callback_overwrites_| is set to 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::Callback<void(const base::ListValue*)> MessageCallback; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterMessageCallback(const std::string& message, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MessageCallback& callback) = 0; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is only needed if an embedder overrides handling of a WebUIMessage and 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then later wants to undo that, or to route it to a different WebUI object. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ProcessWebUIMessage(const GURL& source_url, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& message, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue& args) = 0; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Call a Javascript function by sending its name and arguments down to 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the renderer. This is asynchronous; there's no way to get the result 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of the call, and should be thought of more like sending a message to 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the page. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All function names in WebUI must consist of only ASCII characters. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There are variants for calls with more arguments. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name) = 0; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg) = 0; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2) = 0; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg3) = 0; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction(const std::string& function_name, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg1, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg2, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg3, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& arg4) = 0; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CallJavascriptFunction( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& function_name, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<const base::Value*>& args) = 0; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_BROWSER_WEB_UI_H_ 125