This source file includes following definitions.
- has_shown_confirmation_dialog_
- InitializeHandler
- InitializePage
- Uninitialize
- GetLocalizedValues
- RegisterMessages
- HandleResetProfileSettings
- OnResetProfileSettingsDone
- OnShowResetProfileDialog
- OnHideResetProfileDialog
- OnDismissedResetProfileSettingsBanner
- OnSettingsFetched
- UpdateFeedbackUI
#include "chrome/browser/ui/webui/options/reset_profile_settings_handler.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/metrics/histogram.h"
#include "base/prefs/pref_service.h"
#include "base/strings/string16.h"
#include "base/values.h"
#include "chrome/browser/google/google_util.h"
#include "chrome/browser/profile_resetter/automatic_profile_resetter.h"
#include "chrome/browser/profile_resetter/automatic_profile_resetter_factory.h"
#include "chrome/browser/profile_resetter/brandcode_config_fetcher.h"
#include "chrome/browser/profile_resetter/brandcoded_default_settings.h"
#include "chrome/browser/profile_resetter/profile_resetter.h"
#include "chrome/browser/profile_resetter/resettable_settings_snapshot.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_ui.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
namespace options {
ResetProfileSettingsHandler::ResetProfileSettingsHandler()
: automatic_profile_resetter_(NULL), has_shown_confirmation_dialog_(false) {
google_util::GetBrand(&brandcode_);
}
ResetProfileSettingsHandler::~ResetProfileSettingsHandler() {}
void ResetProfileSettingsHandler::InitializeHandler() {
Profile* profile = Profile::FromWebUI(web_ui());
resetter_.reset(new ProfileResetter(profile));
automatic_profile_resetter_ =
AutomaticProfileResetterFactory::GetForBrowserContext(profile);
}
void ResetProfileSettingsHandler::InitializePage() {
web_ui()->CallJavascriptFunction(
"ResetProfileSettingsOverlay.setResettingState",
base::FundamentalValue(resetter_->IsActive()));
if (automatic_profile_resetter_ &&
automatic_profile_resetter_->ShouldShowResetBanner())
web_ui()->CallJavascriptFunction("ResetProfileSettingsBanner.show");
}
void ResetProfileSettingsHandler::Uninitialize() {
if (has_shown_confirmation_dialog_ && automatic_profile_resetter_) {
automatic_profile_resetter_->NotifyDidCloseWebUIResetDialog(
false );
}
}
void ResetProfileSettingsHandler::GetLocalizedValues(
base::DictionaryValue* localized_strings) {
DCHECK(localized_strings);
static OptionsStringResource resources[] = {
{ "resetProfileSettingsBannerText",
IDS_RESET_PROFILE_SETTINGS_BANNER_TEXT },
{ "resetProfileSettingsCommit", IDS_RESET_PROFILE_SETTINGS_COMMIT_BUTTON },
{ "resetProfileSettingsExplanation",
IDS_RESET_PROFILE_SETTINGS_EXPLANATION },
{ "resetProfileSettingsFeedback", IDS_RESET_PROFILE_SETTINGS_FEEDBACK }
};
RegisterStrings(localized_strings, resources, arraysize(resources));
RegisterTitle(localized_strings, "resetProfileSettingsOverlay",
IDS_RESET_PROFILE_SETTINGS_TITLE);
localized_strings->SetString(
"resetProfileSettingsLearnMoreUrl",
chrome::kResetProfileSettingsLearnMoreURL);
}
void ResetProfileSettingsHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("performResetProfileSettings",
base::Bind(&ResetProfileSettingsHandler::HandleResetProfileSettings,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("onShowResetProfileDialog",
base::Bind(&ResetProfileSettingsHandler::OnShowResetProfileDialog,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("onHideResetProfileDialog",
base::Bind(&ResetProfileSettingsHandler::OnHideResetProfileDialog,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("onDismissedResetProfileSettingsBanner",
base::Bind(&ResetProfileSettingsHandler::
OnDismissedResetProfileSettingsBanner,
base::Unretained(this)));
}
void ResetProfileSettingsHandler::HandleResetProfileSettings(
const base::ListValue* value) {
bool send_settings = false;
if (!value->GetBoolean(0, &send_settings))
NOTREACHED();
DCHECK(brandcode_.empty() || config_fetcher_);
if (config_fetcher_ && config_fetcher_->IsActive()) {
config_fetcher_->SetCallback(
base::Bind(&ResetProfileSettingsHandler::ResetProfile,
Unretained(this),
send_settings));
} else {
ResetProfile(send_settings);
}
}
void ResetProfileSettingsHandler::OnResetProfileSettingsDone(
bool send_feedback) {
web_ui()->CallJavascriptFunction("ResetProfileSettingsOverlay.doneResetting");
if (send_feedback && setting_snapshot_) {
Profile* profile = Profile::FromWebUI(web_ui());
ResettableSettingsSnapshot current_snapshot(profile);
int difference = setting_snapshot_->FindDifferentFields(current_snapshot);
if (difference) {
setting_snapshot_->Subtract(current_snapshot);
std::string report = SerializeSettingsReport(*setting_snapshot_,
difference);
bool is_reset_prompt_active = automatic_profile_resetter_ &&
automatic_profile_resetter_->IsResetPromptFlowActive();
SendSettingsFeedback(report, profile, is_reset_prompt_active ?
PROFILE_RESET_PROMPT : PROFILE_RESET_WEBUI);
}
}
setting_snapshot_.reset();
if (automatic_profile_resetter_) {
automatic_profile_resetter_->NotifyDidCloseWebUIResetDialog(
true );
}
}
void ResetProfileSettingsHandler::OnShowResetProfileDialog(
const base::ListValue* value) {
if (!resetter_->IsActive()) {
setting_snapshot_.reset(
new ResettableSettingsSnapshot(Profile::FromWebUI(web_ui())));
setting_snapshot_->RequestShortcuts(base::Bind(
&ResetProfileSettingsHandler::UpdateFeedbackUI, AsWeakPtr()));
UpdateFeedbackUI();
}
if (automatic_profile_resetter_)
automatic_profile_resetter_->NotifyDidOpenWebUIResetDialog();
has_shown_confirmation_dialog_ = true;
if (brandcode_.empty())
return;
config_fetcher_.reset(new BrandcodeConfigFetcher(
base::Bind(&ResetProfileSettingsHandler::OnSettingsFetched,
Unretained(this)),
GURL("https://tools.google.com/service/update2"),
brandcode_));
}
void ResetProfileSettingsHandler::OnHideResetProfileDialog(
const base::ListValue* value) {
if (!resetter_->IsActive())
setting_snapshot_.reset();
}
void ResetProfileSettingsHandler::OnDismissedResetProfileSettingsBanner(
const base::ListValue* args) {
if (automatic_profile_resetter_)
automatic_profile_resetter_->NotifyDidCloseWebUIResetBanner();
}
void ResetProfileSettingsHandler::OnSettingsFetched() {
DCHECK(config_fetcher_);
DCHECK(!config_fetcher_->IsActive());
}
void ResetProfileSettingsHandler::ResetProfile(bool send_settings) {
DCHECK(resetter_);
DCHECK(!resetter_->IsActive());
scoped_ptr<BrandcodedDefaultSettings> default_settings;
if (config_fetcher_) {
DCHECK(!config_fetcher_->IsActive());
default_settings = config_fetcher_->GetSettings();
config_fetcher_.reset();
} else {
DCHECK(brandcode_.empty());
}
if (!default_settings)
default_settings.reset(new BrandcodedDefaultSettings);
resetter_->Reset(
ProfileResetter::ALL,
default_settings.Pass(),
base::Bind(&ResetProfileSettingsHandler::OnResetProfileSettingsDone,
AsWeakPtr(),
send_settings));
content::RecordAction(base::UserMetricsAction("ResetProfile"));
UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings);
}
void ResetProfileSettingsHandler::UpdateFeedbackUI() {
if (!setting_snapshot_)
return;
scoped_ptr<base::ListValue> list = GetReadableFeedbackForSnapshot(
Profile::FromWebUI(web_ui()),
*setting_snapshot_);
base::DictionaryValue feedback_info;
feedback_info.Set("feedbackInfo", list.release());
web_ui()->CallJavascriptFunction(
"ResetProfileSettingsOverlay.setFeedbackInfo",
feedback_info);
}
}