1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/webui/options/reset_profile_settings_handler.h"
8 #include "base/bind_helpers.h"
9 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h"
11 #include "base/strings/string16.h"
12 #include "base/values.h"
13 #include "chrome/browser/google/google_util.h"
14 #include "chrome/browser/profile_resetter/brandcode_config_fetcher.h"
15 #include "chrome/browser/profile_resetter/brandcoded_default_settings.h"
16 #include "chrome/browser/profile_resetter/profile_resetter.h"
17 #include "chrome/browser/profile_resetter/resettable_settings_snapshot.h"
18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/common/pref_names.h"
20 #include "chrome/common/url_constants.h"
21 #include "content/public/browser/user_metrics.h"
22 #include "content/public/browser/web_ui.h"
23 #include "grit/generated_resources.h"
24 #include "ui/base/l10n/l10n_util.h"
28 ResetProfileSettingsHandler::ResetProfileSettingsHandler() {
29 google_util::GetBrand(&brandcode_);
32 ResetProfileSettingsHandler::~ResetProfileSettingsHandler() {
35 void ResetProfileSettingsHandler::InitializeHandler() {
36 Profile* profile = Profile::FromWebUI(web_ui());
37 resetter_.reset(new ProfileResetter(profile));
40 void ResetProfileSettingsHandler::InitializePage() {
41 web_ui()->CallJavascriptFunction(
42 "ResetProfileSettingsOverlay.setResettingState",
43 base::FundamentalValue(resetter_->IsActive()));
46 void ResetProfileSettingsHandler::GetLocalizedValues(
47 DictionaryValue* localized_strings) {
48 DCHECK(localized_strings);
50 static OptionsStringResource resources[] = {
51 { "resetProfileSettingsCommit", IDS_RESET_PROFILE_SETTINGS_COMMIT_BUTTON },
52 { "resetProfileSettingsExplanation",
53 IDS_RESET_PROFILE_SETTINGS_EXPLANATION},
54 { "resetProfileSettingsFeedback", IDS_RESET_PROFILE_SETTINGS_FEEDBACK }
57 RegisterStrings(localized_strings, resources, arraysize(resources));
58 RegisterTitle(localized_strings, "resetProfileSettingsOverlay",
59 IDS_RESET_PROFILE_SETTINGS_TITLE);
60 localized_strings->SetString(
61 "resetProfileSettingsLearnMoreUrl",
62 chrome::kResetProfileSettingsLearnMoreURL);
65 void ResetProfileSettingsHandler::RegisterMessages() {
66 // Setup handlers specific to this panel.
67 web_ui()->RegisterMessageCallback("performResetProfileSettings",
68 base::Bind(&ResetProfileSettingsHandler::HandleResetProfileSettings,
69 base::Unretained(this)));
70 web_ui()->RegisterMessageCallback("onShowResetProfileDialog",
71 base::Bind(&ResetProfileSettingsHandler::OnShowResetProfileDialog,
72 base::Unretained(this)));
75 void ResetProfileSettingsHandler::HandleResetProfileSettings(
76 const ListValue* value) {
77 bool send_settings = false;
78 if (!value->GetBoolean(0, &send_settings))
81 DCHECK(brandcode_.empty() || config_fetcher_);
82 if (config_fetcher_ && config_fetcher_->IsActive()) {
83 // Reset once the prefs are fetched.
84 config_fetcher_->SetCallback(
85 base::Bind(&ResetProfileSettingsHandler::ResetProfile,
89 ResetProfile(send_settings);
93 void ResetProfileSettingsHandler::OnResetProfileSettingsDone() {
94 web_ui()->CallJavascriptFunction("ResetProfileSettingsOverlay.doneResetting");
95 if (setting_snapshot_) {
96 Profile* profile = Profile::FromWebUI(web_ui());
97 ResettableSettingsSnapshot current_snapshot(profile);
98 int difference = setting_snapshot_->FindDifferentFields(current_snapshot);
100 setting_snapshot_->Subtract(current_snapshot);
101 std::string report = SerializeSettingsReport(*setting_snapshot_,
103 SendSettingsFeedback(report, profile, PROFILE_RESET_WEBUI);
105 setting_snapshot_.reset();
109 void ResetProfileSettingsHandler::OnShowResetProfileDialog(const ListValue*) {
110 DictionaryValue flashInfo;
111 flashInfo.Set("feedbackInfo", GetReadableFeedback(
112 Profile::FromWebUI(web_ui())));
113 web_ui()->CallJavascriptFunction(
114 "ResetProfileSettingsOverlay.setFeedbackInfo",
117 if (brandcode_.empty())
119 config_fetcher_.reset(new BrandcodeConfigFetcher(
120 base::Bind(&ResetProfileSettingsHandler::OnSettingsFetched,
122 GURL("https://tools.google.com/service/update2"),
126 void ResetProfileSettingsHandler::OnSettingsFetched() {
127 DCHECK(config_fetcher_);
128 DCHECK(!config_fetcher_->IsActive());
129 // The master prefs is fetched. We are waiting for user pressing 'Reset'.
132 void ResetProfileSettingsHandler::ResetProfile(bool send_settings) {
134 DCHECK(!resetter_->IsActive());
136 scoped_ptr<BrandcodedDefaultSettings> default_settings;
137 if (config_fetcher_) {
138 DCHECK(!config_fetcher_->IsActive());
139 default_settings = config_fetcher_->GetSettings();
140 config_fetcher_.reset();
142 DCHECK(brandcode_.empty());
145 // If failed to fetch BrandcodedDefaultSettings or this is an organic
146 // installation, use default settings.
147 if (!default_settings)
148 default_settings.reset(new BrandcodedDefaultSettings);
149 // Save current settings if required.
150 setting_snapshot_.reset(send_settings ?
151 new ResettableSettingsSnapshot(Profile::FromWebUI(web_ui())) : NULL);
153 ProfileResetter::ALL,
154 default_settings.Pass(),
155 base::Bind(&ResetProfileSettingsHandler::OnResetProfileSettingsDone,
157 content::RecordAction(content::UserMetricsAction("ResetProfile"));
158 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings);
161 } // namespace options