blob: e29edf771ae57702968ed234c1a0d91dcd78aafa [file] [log] [blame]
// 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