1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_POLICY_MANAGED_PREFS_BANNER_BASE_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_POLICY_MANAGED_PREFS_BANNER_BASE_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/options/options_window.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass PrefService; 15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass PrefSetObserver; 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace policy { 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Common base functionality for the managed prefs warning banner displayed in 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// the preference dialogs when there are options that are controlled by 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// configuration policy and thus cannot be changed by the user. 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass ManagedPrefsBannerBase : public NotificationObserver { 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Initialize the banner with a set of preferences suitable for the given 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // options |page|. Subclasses may change that set by calling AddPref() and 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // RemovePref() afterwards. 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ManagedPrefsBannerBase(PrefService* local_state, 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PrefService* user_prefs, 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OptionsPage page); 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Convenience constructor that fetches the local state PrefService from the 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // global g_browser_process. 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ManagedPrefsBannerBase(PrefService* user_prefs, OptionsPage page); 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ~ManagedPrefsBannerBase(); 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Determine whether the banner should be visible. 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool DetermineVisibility() const; 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add a local state preference as visibility trigger. 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void AddLocalStatePref(const char* pref); 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Remove a local state preference from being a visibility trigger. 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void RemoveLocalStatePref(const char* pref); 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Add a user preference as visibility trigger. 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void AddUserPref(const char* pref); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Remove a user preference from being a visibility trigger. 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void RemoveUserPref(const char* pref); 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected: 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Update banner visibility. This is called whenever a preference change is 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // observed that may lead to changed visibility of the banner. Subclasses may 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // override this in order to show/hide the banner. 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void OnUpdateVisibility() { } 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Initialization helper, called from the constructors. 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Init(PrefService* local_state, 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen PrefService* user_prefs, 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen OptionsPage page); 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // |NotificationObserver| implementation. 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen virtual void Observe(NotificationType type, 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const NotificationSource& source, 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const NotificationDetails& details); 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<PrefSetObserver> local_state_set_; 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<PrefSetObserver> user_pref_set_; 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ManagedPrefsBannerBase); 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} // namespace policy 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_POLICY_MANAGED_PREFS_BANNER_BASE_H_ 76