// 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. #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/logging.h" #include "base/metrics/histogram.h" #include "base/utf_string_conversions.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/prefs/session_startup_pref.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/protector/base_prefs_change.h" #include "chrome/browser/protector/histograms.h" #include "chrome/browser/protector/protector_service.h" #include "chrome/browser/protector/protector_service_factory.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "googleurl/src/gurl.h" #include "grit/chromium_strings.h" #include "grit/generated_resources.h" #include "grit/theme_resources.h" #include "ui/base/l10n/l10n_util.h" namespace protector { // Unknown change to Preferences with invalid backup. class PrefsBackupInvalidChange : public BasePrefsChange { public: PrefsBackupInvalidChange(); // BasePrefsChange overrides: virtual bool Init(Profile* profile) OVERRIDE; virtual void InitWhenDisabled(Profile* profile) OVERRIDE; virtual void Apply(Browser* browser) OVERRIDE; virtual void Discard(Browser* browser) OVERRIDE; virtual void Timeout() OVERRIDE; virtual int GetBadgeIconID() const OVERRIDE; virtual int GetMenuItemIconID() const OVERRIDE; virtual int GetBubbleIconID() const OVERRIDE; virtual string16 GetBubbleTitle() const OVERRIDE; virtual string16 GetBubbleMessage() const OVERRIDE; virtual string16 GetApplyButtonText() const OVERRIDE; virtual string16 GetDiscardButtonText() const OVERRIDE; virtual bool CanBeMerged() const OVERRIDE; private: virtual ~PrefsBackupInvalidChange(); // Applies default settings values when appropriate. void ApplyDefaults(Profile* profile); // True if session startup prefs have been reset. bool startup_pref_reset_; DISALLOW_COPY_AND_ASSIGN(PrefsBackupInvalidChange); }; PrefsBackupInvalidChange::PrefsBackupInvalidChange() : startup_pref_reset_(false) { } PrefsBackupInvalidChange::~PrefsBackupInvalidChange() { } bool PrefsBackupInvalidChange::Init(Profile* profile) { if (!BasePrefsChange::Init(profile)) return false; ApplyDefaults(profile); DismissOnPrefChange(prefs::kHomePageIsNewTabPage); DismissOnPrefChange(prefs::kHomePage); DismissOnPrefChange(prefs::kShowHomeButton); DismissOnPrefChange(prefs::kRestoreOnStartup); DismissOnPrefChange(prefs::kURLsToRestoreOnStartup); DismissOnPrefChange(prefs::kPinnedTabs); return true; } void PrefsBackupInvalidChange::InitWhenDisabled(Profile* profile) { // Nothing to do here since the backup has been already reset. } void PrefsBackupInvalidChange::Apply(Browser* browser) { NOTREACHED(); } void PrefsBackupInvalidChange::Discard(Browser* browser) { // TODO(ivankr): highlight the protected prefs on the settings page // (http://crbug.com/119088). ProtectorServiceFactory::GetForProfile(profile())->OpenTab( GURL(chrome::kChromeUISettingsURL), browser); } void PrefsBackupInvalidChange::Timeout() { } int PrefsBackupInvalidChange::GetBadgeIconID() const { return IDR_UPDATE_BADGE4; } int PrefsBackupInvalidChange::GetMenuItemIconID() const { return IDR_UPDATE_MENU4; } int PrefsBackupInvalidChange::GetBubbleIconID() const { return IDR_INPUT_ALERT; } string16 PrefsBackupInvalidChange::GetBubbleTitle() const { return l10n_util::GetStringUTF16(IDS_SETTING_CHANGE_TITLE); } string16 PrefsBackupInvalidChange::GetBubbleMessage() const { return startup_pref_reset_ ? l10n_util::GetStringUTF16( IDS_SETTING_CHANGE_NO_BACKUP_STARTUP_RESET_BUBBLE_MESSAGE) : l10n_util::GetStringUTF16(IDS_SETTING_CHANGE_BUBBLE_MESSAGE); } string16 PrefsBackupInvalidChange::GetApplyButtonText() const { // Don't show this button. return string16(); } string16 PrefsBackupInvalidChange::GetDiscardButtonText() const { return l10n_util::GetStringUTF16(IDS_EDIT_SETTINGS); } void PrefsBackupInvalidChange::ApplyDefaults(Profile* profile) { PrefService* prefs = profile->GetPrefs(); SessionStartupPref startup_pref = SessionStartupPref::GetStartupPref(prefs); if (startup_pref.type != SessionStartupPref::LAST) { // If startup type is LAST, resetting it is dangerous (the whole previous // session will be lost). prefs->ClearPref(prefs::kRestoreOnStartup); startup_pref_reset_ = true; } prefs->ClearPref(prefs::kHomePageIsNewTabPage); prefs->ClearPref(prefs::kHomePage); prefs->ClearPref(prefs::kShowHomeButton); } bool PrefsBackupInvalidChange::CanBeMerged() const { return false; } BaseSettingChange* CreatePrefsBackupInvalidChange() { return new PrefsBackupInvalidChange(); } } // namespace protector