Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(638)

Side by Side Diff: chrome/browser/ui/webui/settings/reset_settings_handler.cc

Issue 1490503002: MD Settings: Adding unit test for ResetSettingsHandler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing comments. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/settings/reset_settings_handler.h" 5 #include "chrome/browser/ui/webui/settings/reset_settings_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 25 matching lines...) Expand all
36 #endif // defined(OS_CHROMEOS) 36 #endif // defined(OS_CHROMEOS)
37 37
38 #if defined(OS_WIN) 38 #if defined(OS_WIN)
39 #include "chrome/browser/profile_resetter/triggered_profile_resetter.h" 39 #include "chrome/browser/profile_resetter/triggered_profile_resetter.h"
40 #include "chrome/browser/profile_resetter/triggered_profile_resetter_factory.h" 40 #include "chrome/browser/profile_resetter/triggered_profile_resetter_factory.h"
41 #endif // defined(OS_WIN) 41 #endif // defined(OS_WIN)
42 42
43 namespace settings { 43 namespace settings {
44 44
45 ResetSettingsHandler::ResetSettingsHandler( 45 ResetSettingsHandler::ResetSettingsHandler(
46 content::WebUIDataSource* html_source, content::WebUI* web_ui) { 46 Profile* profile, bool allow_powerwash) : profile_(profile) {
47 #if defined(OS_CHROMEOS)
48 allow_powerwash_ = allow_powerwash;
49 #endif // defined(OS_CHROMEOS)
47 google_brand::GetBrand(&brandcode_); 50 google_brand::GetBrand(&brandcode_);
48 Profile* profile = Profile::FromWebUI(web_ui);
49 resetter_.reset(new ProfileResetter(profile));
50
51 #if defined(OS_CHROMEOS)
52 policy::BrowserPolicyConnectorChromeOS* connector =
53 g_browser_process->platform_part()->browser_policy_connector_chromeos();
54 allow_powerwash_ = !connector->IsEnterpriseManaged() &&
55 !user_manager::UserManager::Get()->IsLoggedInAsGuest() &&
56 !user_manager::UserManager::Get()->IsLoggedInAsSupervisedUser();
57 html_source->AddBoolean("allowPowerwash", allow_powerwash_);
58 #endif // defined(OS_CHROMEOS)
59 } 51 }
60 52
61 ResetSettingsHandler::~ResetSettingsHandler() {} 53 ResetSettingsHandler::~ResetSettingsHandler() {}
62 54
55 ResetSettingsHandler* ResetSettingsHandler::Create(
56 content::WebUIDataSource* html_source, Profile* profile) {
57 bool allow_powerwash = false;
58 #if defined(OS_CHROMEOS)
59 policy::BrowserPolicyConnectorChromeOS* connector =
60 g_browser_process->platform_part()->browser_policy_connector_chromeos();
61 allow_powerwash = !connector->IsEnterpriseManaged() &&
62 !user_manager::UserManager::Get()->IsLoggedInAsGuest() &&
63 !user_manager::UserManager::Get()->IsLoggedInAsSupervisedUser();
64 html_source->AddBoolean("allowPowerwash", allow_powerwash);
65 #endif // defined(OS_CHROMEOS)
66
67 // Inject |allow_powerwash| for testing.
68 return new ResetSettingsHandler(profile, allow_powerwash);
69 }
70
63 void ResetSettingsHandler::RegisterMessages() { 71 void ResetSettingsHandler::RegisterMessages() {
64 web_ui()->RegisterMessageCallback("performResetProfileSettings", 72 web_ui()->RegisterMessageCallback("performResetProfileSettings",
65 base::Bind(&ResetSettingsHandler::HandleResetProfileSettings, 73 base::Bind(&ResetSettingsHandler::HandleResetProfileSettings,
66 base::Unretained(this))); 74 base::Unretained(this)));
67 web_ui()->RegisterMessageCallback("onShowResetProfileDialog", 75 web_ui()->RegisterMessageCallback("onShowResetProfileDialog",
68 base::Bind(&ResetSettingsHandler::OnShowResetProfileDialog, 76 base::Bind(&ResetSettingsHandler::OnShowResetProfileDialog,
69 base::Unretained(this))); 77 base::Unretained(this)));
70 web_ui()->RegisterMessageCallback("onHideResetProfileDialog", 78 web_ui()->RegisterMessageCallback("onHideResetProfileDialog",
71 base::Bind(&ResetSettingsHandler::OnHideResetProfileDialog, 79 base::Bind(&ResetSettingsHandler::OnHideResetProfileDialog,
72 base::Unretained(this))); 80 base::Unretained(this)));
(...skipping 24 matching lines...) Expand all
97 send_settings)); 105 send_settings));
98 } else { 106 } else {
99 ResetProfile(send_settings); 107 ResetProfile(send_settings);
100 } 108 }
101 } 109 }
102 110
103 void ResetSettingsHandler::OnResetProfileSettingsDone( 111 void ResetSettingsHandler::OnResetProfileSettingsDone(
104 bool send_feedback) { 112 bool send_feedback) {
105 web_ui()->CallJavascriptFunction("SettingsResetPage.doneResetting"); 113 web_ui()->CallJavascriptFunction("SettingsResetPage.doneResetting");
106 if (send_feedback && setting_snapshot_) { 114 if (send_feedback && setting_snapshot_) {
107 Profile* profile = Profile::FromWebUI(web_ui()); 115 ResettableSettingsSnapshot current_snapshot(profile_);
108 ResettableSettingsSnapshot current_snapshot(profile);
109 int difference = setting_snapshot_->FindDifferentFields(current_snapshot); 116 int difference = setting_snapshot_->FindDifferentFields(current_snapshot);
110 if (difference) { 117 if (difference) {
111 setting_snapshot_->Subtract(current_snapshot); 118 setting_snapshot_->Subtract(current_snapshot);
112 std::string report = SerializeSettingsReport(*setting_snapshot_, 119 std::string report = SerializeSettingsReport(*setting_snapshot_,
113 difference); 120 difference);
114 SendSettingsFeedback(report, profile); 121 SendSettingsFeedback(report, profile_);
115 } 122 }
116 } 123 }
117 setting_snapshot_.reset(); 124 setting_snapshot_.reset();
118 } 125 }
119 126
120 void ResetSettingsHandler::OnShowResetProfileDialog( 127 void ResetSettingsHandler::OnShowResetProfileDialog(
121 const base::ListValue* value) { 128 const base::ListValue* value) {
122 if (!resetter_->IsActive()) { 129 if (!GetResetter()->IsActive()) {
123 setting_snapshot_.reset( 130 setting_snapshot_.reset(new ResettableSettingsSnapshot(profile_));
124 new ResettableSettingsSnapshot(Profile::FromWebUI(web_ui())));
125 setting_snapshot_->RequestShortcuts(base::Bind( 131 setting_snapshot_->RequestShortcuts(base::Bind(
126 &ResetSettingsHandler::UpdateFeedbackUI, AsWeakPtr())); 132 &ResetSettingsHandler::UpdateFeedbackUI, AsWeakPtr()));
127 UpdateFeedbackUI(); 133 UpdateFeedbackUI();
128 } 134 }
129 135
130 if (brandcode_.empty()) 136 if (brandcode_.empty())
131 return; 137 return;
132 config_fetcher_.reset(new BrandcodeConfigFetcher( 138 config_fetcher_.reset(new BrandcodeConfigFetcher(
133 base::Bind(&ResetSettingsHandler::OnSettingsFetched, 139 base::Bind(&ResetSettingsHandler::OnSettingsFetched,
134 Unretained(this)), 140 Unretained(this)),
135 GURL("https://tools.google.com/service/update2"), 141 GURL("https://tools.google.com/service/update2"),
136 brandcode_)); 142 brandcode_));
137 } 143 }
138 144
139 void ResetSettingsHandler::OnHideResetProfileDialog( 145 void ResetSettingsHandler::OnHideResetProfileDialog(
140 const base::ListValue* value) { 146 const base::ListValue* value) {
141 if (!resetter_->IsActive()) 147 if (!GetResetter()->IsActive())
142 setting_snapshot_.reset(); 148 setting_snapshot_.reset();
143 } 149 }
144 150
145 void ResetSettingsHandler::OnSettingsFetched() { 151 void ResetSettingsHandler::OnSettingsFetched() {
146 DCHECK(config_fetcher_); 152 DCHECK(config_fetcher_);
147 DCHECK(!config_fetcher_->IsActive()); 153 DCHECK(!config_fetcher_->IsActive());
148 // The master prefs is fetched. We are waiting for user pressing 'Reset'. 154 // The master prefs is fetched. We are waiting for user pressing 'Reset'.
149 } 155 }
150 156
151 void ResetSettingsHandler::ResetProfile(bool send_settings) { 157 void ResetSettingsHandler::ResetProfile(bool send_settings) {
152 DCHECK(resetter_); 158 DCHECK(!GetResetter()->IsActive());
153 DCHECK(!resetter_->IsActive());
154 159
155 scoped_ptr<BrandcodedDefaultSettings> default_settings; 160 scoped_ptr<BrandcodedDefaultSettings> default_settings;
156 if (config_fetcher_) { 161 if (config_fetcher_) {
157 DCHECK(!config_fetcher_->IsActive()); 162 DCHECK(!config_fetcher_->IsActive());
158 default_settings = config_fetcher_->GetSettings(); 163 default_settings = config_fetcher_->GetSettings();
159 config_fetcher_.reset(); 164 config_fetcher_.reset();
160 } else { 165 } else {
161 DCHECK(brandcode_.empty()); 166 DCHECK(brandcode_.empty());
162 } 167 }
163 168
164 // If failed to fetch BrandcodedDefaultSettings or this is an organic 169 // If failed to fetch BrandcodedDefaultSettings or this is an organic
165 // installation, use default settings. 170 // installation, use default settings.
166 if (!default_settings) 171 if (!default_settings)
167 default_settings.reset(new BrandcodedDefaultSettings); 172 default_settings.reset(new BrandcodedDefaultSettings);
168 resetter_->Reset( 173
174 GetResetter()->Reset(
169 ProfileResetter::ALL, 175 ProfileResetter::ALL,
170 default_settings.Pass(), 176 default_settings.Pass(),
171 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone, 177 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone,
172 AsWeakPtr(), 178 AsWeakPtr(),
173 send_settings)); 179 send_settings));
174 content::RecordAction(base::UserMetricsAction("ResetProfile")); 180 content::RecordAction(base::UserMetricsAction("ResetProfile"));
175 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings); 181 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings);
176 } 182 }
177 183
178 void ResetSettingsHandler::UpdateFeedbackUI() { 184 void ResetSettingsHandler::UpdateFeedbackUI() {
179 if (!setting_snapshot_) 185 if (!setting_snapshot_)
180 return; 186 return;
181 scoped_ptr<base::ListValue> list = GetReadableFeedbackForSnapshot( 187 scoped_ptr<base::ListValue> list = GetReadableFeedbackForSnapshot(
182 Profile::FromWebUI(web_ui()), 188 profile_, *setting_snapshot_);
183 *setting_snapshot_);
184 base::DictionaryValue feedback_info; 189 base::DictionaryValue feedback_info;
185 feedback_info.Set("feedbackInfo", list.release()); 190 feedback_info.Set("feedbackInfo", list.release());
186 web_ui()->CallJavascriptFunction( 191 web_ui()->CallJavascriptFunction(
187 "SettingsResetPage.setFeedbackInfo", feedback_info); 192 "SettingsResetPage.setFeedbackInfo", feedback_info);
188 } 193 }
189 194
195 ProfileResetter* ResetSettingsHandler::GetResetter() {
196 if (!resetter_)
197 resetter_.reset(new ProfileResetter(profile_));
198 return resetter_.get();
199 }
200
190 #if defined(OS_CHROMEOS) 201 #if defined(OS_CHROMEOS)
191 void ResetSettingsHandler::OnShowPowerwashDialog( 202 void ResetSettingsHandler::OnShowPowerwashDialog(
192 const base::ListValue* args) { 203 const base::ListValue* args) {
193 UMA_HISTOGRAM_ENUMERATION( 204 UMA_HISTOGRAM_ENUMERATION(
194 "Reset.ChromeOS.PowerwashDialogShown", 205 "Reset.ChromeOS.PowerwashDialogShown",
195 chromeos::reset::DIALOG_FROM_OPTIONS, 206 chromeos::reset::DIALOG_FROM_OPTIONS,
196 chromeos::reset::DIALOG_VIEW_TYPE_SIZE); 207 chromeos::reset::DIALOG_VIEW_TYPE_SIZE);
197 } 208 }
198 209
199 void ResetSettingsHandler::HandleFactoryResetRestart( 210 void ResetSettingsHandler::HandleFactoryResetRestart(
200 const base::ListValue* args) { 211 const base::ListValue* args) {
201 if (!allow_powerwash_) 212 if (!allow_powerwash_)
202 return; 213 return;
203 214
204 PrefService* prefs = g_browser_process->local_state(); 215 PrefService* prefs = g_browser_process->local_state();
205 prefs->SetBoolean(prefs::kFactoryResetRequested, true); 216 prefs->SetBoolean(prefs::kFactoryResetRequested, true);
206 prefs->CommitPendingWrite(); 217 prefs->CommitPendingWrite();
207 218
208 // Perform sign out. Current chrome process will then terminate, new one will 219 // Perform sign out. Current chrome process will then terminate, new one will
209 // be launched (as if it was a restart). 220 // be launched (as if it was a restart).
210 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 221 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
211 } 222 }
212 #endif // defined(OS_CHROMEOS) 223 #endif // defined(OS_CHROMEOS)
213 224
214 } // namespace settings 225 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698