| // 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. |
| |
| #include "chrome/browser/policy/managed_prefs_banner_base.h" |
| |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/prefs/pref_set_observer.h" |
| #include "chrome/common/pref_names.h" |
| #include "content/common/notification_details.h" |
| #include "content/common/notification_type.h" |
| |
| #if defined(OS_CHROMEOS) |
| #include "chrome/browser/chromeos/cros_settings_names.h" |
| #endif |
| |
| namespace policy { |
| |
| ManagedPrefsBannerBase::ManagedPrefsBannerBase(PrefService* user_prefs, |
| OptionsPage page) { |
| Init(g_browser_process->local_state(), user_prefs, page); |
| } |
| |
| ManagedPrefsBannerBase::ManagedPrefsBannerBase(PrefService* local_state, |
| PrefService* user_prefs, |
| OptionsPage page) { |
| Init(local_state, user_prefs, page); |
| } |
| |
| ManagedPrefsBannerBase::~ManagedPrefsBannerBase() {} |
| |
| void ManagedPrefsBannerBase::AddLocalStatePref(const char* pref) { |
| local_state_set_->AddPref(pref); |
| } |
| |
| void ManagedPrefsBannerBase::RemoveLocalStatePref(const char* pref) { |
| local_state_set_->RemovePref(pref); |
| } |
| |
| void ManagedPrefsBannerBase::AddUserPref(const char* pref) { |
| user_pref_set_->AddPref(pref); |
| } |
| |
| void ManagedPrefsBannerBase::RemoveUserPref(const char* pref) { |
| user_pref_set_->RemovePref(pref); |
| } |
| |
| bool ManagedPrefsBannerBase::DetermineVisibility() const { |
| return local_state_set_->IsManaged() || user_pref_set_->IsManaged(); |
| } |
| |
| void ManagedPrefsBannerBase::Init(PrefService* local_state, |
| PrefService* user_prefs, |
| OptionsPage page) { |
| local_state_set_.reset(new PrefSetObserver(local_state, this)); |
| user_pref_set_.reset(new PrefSetObserver(user_prefs, this)); |
| |
| switch (page) { |
| case OPTIONS_PAGE_GENERAL: |
| AddUserPref(prefs::kHomePage); |
| AddUserPref(prefs::kHomePageIsNewTabPage); |
| AddUserPref(prefs::kShowHomeButton); |
| AddUserPref(prefs::kRestoreOnStartup); |
| AddUserPref(prefs::kURLsToRestoreOnStartup); |
| AddUserPref(prefs::kDefaultSearchProviderEnabled); |
| AddUserPref(prefs::kDefaultSearchProviderName); |
| AddUserPref(prefs::kDefaultSearchProviderKeyword); |
| AddUserPref(prefs::kDefaultSearchProviderInstantURL); |
| AddUserPref(prefs::kDefaultSearchProviderSearchURL); |
| AddUserPref(prefs::kDefaultSearchProviderSuggestURL); |
| AddUserPref(prefs::kDefaultSearchProviderIconURL); |
| AddUserPref(prefs::kDefaultSearchProviderEncodings); |
| AddUserPref(prefs::kInstantEnabled); |
| AddLocalStatePref(prefs::kDefaultBrowserSettingEnabled); |
| break; |
| case OPTIONS_PAGE_CONTENT: |
| AddUserPref(prefs::kSyncManaged); |
| AddUserPref(prefs::kAutofillEnabled); |
| AddUserPref(prefs::kPasswordManagerEnabled); |
| #if defined(OS_CHROMEOS) |
| AddUserPref(prefs::kEnableScreenLock); |
| #endif |
| break; |
| case OPTIONS_PAGE_ADVANCED: |
| AddUserPref(prefs::kAlternateErrorPagesEnabled); |
| AddUserPref(prefs::kSearchSuggestEnabled); |
| AddUserPref(prefs::kNetworkPredictionEnabled); |
| AddUserPref(prefs::kDisableSpdy); |
| AddUserPref(prefs::kSafeBrowsingEnabled); |
| #if defined(GOOGLE_CHROME_BUILD) |
| AddLocalStatePref(prefs::kMetricsReportingEnabled); |
| #endif |
| AddUserPref(prefs::kProxy); |
| AddUserPref(prefs::kCloudPrintProxyEnabled); |
| AddUserPref(prefs::kDownloadDefaultDirectory); |
| AddUserPref(prefs::kEnableTranslate); |
| break; |
| #if defined(OS_CHROMEOS) |
| case OPTIONS_PAGE_ACCOUNTS: |
| AddLocalStatePref(chromeos::kAccountsPrefAllowGuest); |
| AddLocalStatePref(chromeos::kAccountsPrefAllowNewUser); |
| AddLocalStatePref(chromeos::kAccountsPrefShowUserNamesOnSignIn); |
| AddLocalStatePref(chromeos::kAccountsPrefUsers); |
| AddLocalStatePref(chromeos::kSystemTimezone); |
| break; |
| #endif |
| default: |
| NOTREACHED(); |
| } |
| } |
| |
| void ManagedPrefsBannerBase::Observe(NotificationType type, |
| const NotificationSource& source, |
| const NotificationDetails& details) { |
| if (NotificationType::PREF_CHANGED == type) { |
| std::string* pref = Details<std::string>(details).ptr(); |
| if (pref && (local_state_set_->IsObserved(*pref) || |
| user_pref_set_->IsObserved(*pref))) |
| OnUpdateVisibility(); |
| } |
| } |
| |
| } // namespace policy |