// Copyright (c) 2012 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_IMPL_H_ #define CONTENT_BROWSER_WEBUI_WEB_UI_IMPL_H_ #include #include #include "base/compiler_specific.h" #include "base/memory/scoped_vector.h" #include "base/memory/weak_ptr.h" #include "content/public/browser/web_ui.h" #include "ipc/ipc_listener.h" namespace content { class RenderFrameHost; class RenderViewHost; class CONTENT_EXPORT WebUIImpl : public WebUI, public IPC::Listener, public base::SupportsWeakPtr { public: explicit WebUIImpl(WebContents* contents); ~WebUIImpl() override; // Called by WebContentsImpl when the RenderView is first created. This is // *not* called for every page load because in some cases // RenderFrameHostManager will reuse RenderView instances. void RenderViewCreated(RenderViewHost* render_view_host); // WebUI implementation: WebContents* GetWebContents() const override; WebUIController* GetController() const override; void SetController(WebUIController* controller) override; float GetDeviceScaleFactor() const override; const base::string16& GetOverriddenTitle() const override; void OverrideTitle(const base::string16& title) override; ui::PageTransition GetLinkTransitionType() const override; void SetLinkTransitionType(ui::PageTransition type) override; int GetBindings() const override; void SetBindings(int bindings) override; void OverrideJavaScriptFrame(const std::string& frame_name) override; void AddMessageHandler(WebUIMessageHandler* handler) override; typedef base::Callback MessageCallback; void RegisterMessageCallback(const std::string& message, const MessageCallback& callback) override; void ProcessWebUIMessage(const GURL& source_url, const std::string& message, const base::ListValue& args) override; void CallJavascriptFunction(const std::string& function_name) override; void CallJavascriptFunction(const std::string& function_name, const base::Value& arg) override; void CallJavascriptFunction(const std::string& function_name, const base::Value& arg1, const base::Value& arg2) override; void CallJavascriptFunction(const std::string& function_name, const base::Value& arg1, const base::Value& arg2, const base::Value& arg3) override; void CallJavascriptFunction(const std::string& function_name, const base::Value& arg1, const base::Value& arg2, const base::Value& arg3, const base::Value& arg4) override; void CallJavascriptFunction( const std::string& function_name, const std::vector& args) override; // IPC::Listener implementation: bool OnMessageReceived(const IPC::Message& message) override; private: // IPC message handling. void OnWebUISend(const GURL& source_url, const std::string& message, const base::ListValue& args); // Execute a string of raw JavaScript on the page. void ExecuteJavascript(const base::string16& javascript); // Finds the frame in which to execute JavaScript (the one specified by // OverrideJavaScriptFrame). May return NULL if no frame of the specified name // exists in the page. RenderFrameHost* TargetFrame(); // A helper function for TargetFrame; adds a frame to the specified set if its // name matches frame_name_. void AddToSetIfFrameNameMatches(std::set* frame_set, RenderFrameHost* host); // A map of message name -> message handling callback. typedef std::map MessageCallbackMap; MessageCallbackMap message_callbacks_; // Options that may be overridden by individual Web UI implementations. The // bool options default to false. See the public getters for more information. base::string16 overridden_title_; // Defaults to empty string. ui::PageTransition link_transition_type_; // Defaults to LINK. int bindings_; // The bindings from BindingsPolicy that should be enabled for // this page. // The WebUIMessageHandlers we own. ScopedVector handlers_; // Non-owning pointer to the WebContents this WebUI is associated with. WebContents* web_contents_; // The name of the iframe this WebUI is embedded in (empty if not explicitly // overridden with OverrideJavaScriptFrame). std::string frame_name_; scoped_ptr controller_; DISALLOW_COPY_AND_ASSIGN(WebUIImpl); }; } // namespace content #endif // CONTENT_BROWSER_WEBUI_WEB_UI_IMPL_H_