// 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 CHROME_BROWSER_UI_WEBUI_OPTIONS_OPTIONS_UI_H_ #define CHROME_BROWSER_UI_WEBUI_OPTIONS_OPTIONS_UI_H_ #pragma once #include <string> #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/ui/webui/chrome_url_data_manager.h" #include "content/browser/webui/web_ui.h" #include "content/common/notification_observer.h" #include "content/common/notification_registrar.h" #include "content/common/notification_type.h" class GURL; class PrefService; struct UserMetricsAction; // The base class handler of Javascript messages of options pages. class OptionsPageUIHandler : public WebUIMessageHandler, public NotificationObserver { public: OptionsPageUIHandler(); virtual ~OptionsPageUIHandler(); // Is this handler enabled? virtual bool IsEnabled(); // Collects localized strings for options page. virtual void GetLocalizedValues(DictionaryValue* localized_strings) = 0; // Initialize the page. Called once the DOM is available for manipulation. // This will be called only once. virtual void Initialize() {} // Uninitializes the page. Called just before the object is destructed. virtual void Uninitialize() {} // WebUIMessageHandler implementation. virtual void RegisterMessages() {} // NotificationObserver implementation. virtual void Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) {} void UserMetricsRecordAction(const UserMetricsAction& action); protected: struct OptionsStringResource { // The name of the resource in templateData. const char* name; // The .grd ID for the resource (IDS_*). int id; }; // A helper for simplifying the process of registering strings in WebUI. static void RegisterStrings(DictionaryValue* localized_strings, const OptionsStringResource* resources, size_t length); // Registers string resources for a page's header and tab title. static void RegisterTitle(DictionaryValue* localized_strings, const std::string& variable_name, int title_id); NotificationRegistrar registrar_; private: DISALLOW_COPY_AND_ASSIGN(OptionsPageUIHandler); }; // An interface for common operations that a host of OptionsPageUIHandlers // should provide. class OptionsPageUIHandlerHost { public: virtual void InitializeHandlers() = 0; }; // The WebUI for chrome:settings. class OptionsUI : public WebUI, public OptionsPageUIHandlerHost { public: explicit OptionsUI(TabContents* contents); virtual ~OptionsUI(); static RefCountedMemory* GetFaviconResourceBytes(); // Overridden from WebUI: virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE; virtual void DidBecomeActiveForReusedRenderView() OVERRIDE; // Overridden from OptionsPageUIHandlerHost: virtual void InitializeHandlers() OVERRIDE; private: // Adds OptionsPageUiHandler to the handlers list if handler is enabled. void AddOptionsPageUIHandler(DictionaryValue* localized_strings, OptionsPageUIHandler* handler); bool initialized_handlers_; DISALLOW_COPY_AND_ASSIGN(OptionsUI); }; #endif // CHROME_BROWSER_UI_WEBUI_OPTIONS_OPTIONS_UI_H_