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

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: Cleanup 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)
Dan Beam 2015/12/01 04:27:37 so.... have you tried this on chromeos? :)
dpapad 2015/12/01 19:06:04 Fixed. Thanks for catching.
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 // Injecting |allow_powerwash| via the constructor because makes testing this
68 // class much easier.
Dan Beam 2015/12/01 04:27:37 // Inject |allow_powerwash| for testing. or just
dpapad 2015/12/01 19:06:04 Done.
69 return new ResetSettingsHandler(profile, allow_powerwash);
70 }
71
63 void ResetSettingsHandler::RegisterMessages() { 72 void ResetSettingsHandler::RegisterMessages() {
64 web_ui()->RegisterMessageCallback("performResetProfileSettings", 73 web_ui()->RegisterMessageCallback("performResetProfileSettings",
65 base::Bind(&ResetSettingsHandler::HandleResetProfileSettings, 74 base::Bind(&ResetSettingsHandler::HandleResetProfileSettings,
66 base::Unretained(this))); 75 base::Unretained(this)));
67 web_ui()->RegisterMessageCallback("onShowResetProfileDialog", 76 web_ui()->RegisterMessageCallback("onShowResetProfileDialog",
68 base::Bind(&ResetSettingsHandler::OnShowResetProfileDialog, 77 base::Bind(&ResetSettingsHandler::OnShowResetProfileDialog,
69 base::Unretained(this))); 78 base::Unretained(this)));
70 web_ui()->RegisterMessageCallback("onHideResetProfileDialog", 79 web_ui()->RegisterMessageCallback("onHideResetProfileDialog",
71 base::Bind(&ResetSettingsHandler::OnHideResetProfileDialog, 80 base::Bind(&ResetSettingsHandler::OnHideResetProfileDialog,
72 base::Unretained(this))); 81 base::Unretained(this)));
(...skipping 24 matching lines...) Expand all
97 send_settings)); 106 send_settings));
98 } else { 107 } else {
99 ResetProfile(send_settings); 108 ResetProfile(send_settings);
100 } 109 }
101 } 110 }
102 111
103 void ResetSettingsHandler::OnResetProfileSettingsDone( 112 void ResetSettingsHandler::OnResetProfileSettingsDone(
104 bool send_feedback) { 113 bool send_feedback) {
105 web_ui()->CallJavascriptFunction("SettingsResetPage.doneResetting"); 114 web_ui()->CallJavascriptFunction("SettingsResetPage.doneResetting");
106 if (send_feedback && setting_snapshot_) { 115 if (send_feedback && setting_snapshot_) {
107 Profile* profile = Profile::FromWebUI(web_ui()); 116 ResettableSettingsSnapshot current_snapshot(profile_);
108 ResettableSettingsSnapshot current_snapshot(profile);
109 int difference = setting_snapshot_->FindDifferentFields(current_snapshot); 117 int difference = setting_snapshot_->FindDifferentFields(current_snapshot);
110 if (difference) { 118 if (difference) {
111 setting_snapshot_->Subtract(current_snapshot); 119 setting_snapshot_->Subtract(current_snapshot);
112 std::string report = SerializeSettingsReport(*setting_snapshot_, 120 std::string report = SerializeSettingsReport(*setting_snapshot_,
113 difference); 121 difference);
114 SendSettingsFeedback(report, profile); 122 SendSettingsFeedback(report, profile_);
115 } 123 }
116 } 124 }
117 setting_snapshot_.reset(); 125 setting_snapshot_.reset();
118 } 126 }
119 127
120 void ResetSettingsHandler::OnShowResetProfileDialog( 128 void ResetSettingsHandler::OnShowResetProfileDialog(
121 const base::ListValue* value) { 129 const base::ListValue* value) {
122 if (!resetter_->IsActive()) { 130 if (!GetResetter()->IsActive()) {
123 setting_snapshot_.reset( 131 setting_snapshot_.reset(new ResettableSettingsSnapshot(profile_));
124 new ResettableSettingsSnapshot(Profile::FromWebUI(web_ui())));
125 setting_snapshot_->RequestShortcuts(base::Bind( 132 setting_snapshot_->RequestShortcuts(base::Bind(
126 &ResetSettingsHandler::UpdateFeedbackUI, AsWeakPtr())); 133 &ResetSettingsHandler::UpdateFeedbackUI, AsWeakPtr()));
127 UpdateFeedbackUI(); 134 UpdateFeedbackUI();
128 } 135 }
129 136
130 if (brandcode_.empty()) 137 if (brandcode_.empty())
131 return; 138 return;
132 config_fetcher_.reset(new BrandcodeConfigFetcher( 139 config_fetcher_.reset(new BrandcodeConfigFetcher(
133 base::Bind(&ResetSettingsHandler::OnSettingsFetched, 140 base::Bind(&ResetSettingsHandler::OnSettingsFetched,
134 Unretained(this)), 141 Unretained(this)),
135 GURL("https://tools.google.com/service/update2"), 142 GURL("https://tools.google.com/service/update2"),
136 brandcode_)); 143 brandcode_));
137 } 144 }
138 145
139 void ResetSettingsHandler::OnHideResetProfileDialog( 146 void ResetSettingsHandler::OnHideResetProfileDialog(
140 const base::ListValue* value) { 147 const base::ListValue* value) {
141 if (!resetter_->IsActive()) 148 if (!GetResetter()->IsActive())
142 setting_snapshot_.reset(); 149 setting_snapshot_.reset();
143 } 150 }
144 151
145 void ResetSettingsHandler::OnSettingsFetched() { 152 void ResetSettingsHandler::OnSettingsFetched() {
146 DCHECK(config_fetcher_); 153 DCHECK(config_fetcher_);
147 DCHECK(!config_fetcher_->IsActive()); 154 DCHECK(!config_fetcher_->IsActive());
148 // The master prefs is fetched. We are waiting for user pressing 'Reset'. 155 // The master prefs is fetched. We are waiting for user pressing 'Reset'.
149 } 156 }
150 157
151 void ResetSettingsHandler::ResetProfile(bool send_settings) { 158 void ResetSettingsHandler::ResetProfile(bool send_settings) {
152 DCHECK(resetter_); 159 DCHECK(!GetResetter()->IsActive());
153 DCHECK(!resetter_->IsActive());
154 160
155 scoped_ptr<BrandcodedDefaultSettings> default_settings; 161 scoped_ptr<BrandcodedDefaultSettings> default_settings;
156 if (config_fetcher_) { 162 if (config_fetcher_) {
157 DCHECK(!config_fetcher_->IsActive()); 163 DCHECK(!config_fetcher_->IsActive());
158 default_settings = config_fetcher_->GetSettings(); 164 default_settings = config_fetcher_->GetSettings();
159 config_fetcher_.reset(); 165 config_fetcher_.reset();
160 } else { 166 } else {
161 DCHECK(brandcode_.empty()); 167 DCHECK(brandcode_.empty());
162 } 168 }
163 169
164 // If failed to fetch BrandcodedDefaultSettings or this is an organic 170 // If failed to fetch BrandcodedDefaultSettings or this is an organic
165 // installation, use default settings. 171 // installation, use default settings.
166 if (!default_settings) 172 if (!default_settings)
167 default_settings.reset(new BrandcodedDefaultSettings); 173 default_settings.reset(new BrandcodedDefaultSettings);
168 resetter_->Reset( 174
175 GetResetter()->Reset(
169 ProfileResetter::ALL, 176 ProfileResetter::ALL,
170 default_settings.Pass(), 177 default_settings.Pass(),
171 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone, 178 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone,
172 AsWeakPtr(), 179 AsWeakPtr(),
173 send_settings)); 180 send_settings));
174 content::RecordAction(base::UserMetricsAction("ResetProfile")); 181 content::RecordAction(base::UserMetricsAction("ResetProfile"));
175 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings); 182 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings);
176 } 183 }
177 184
178 void ResetSettingsHandler::UpdateFeedbackUI() { 185 void ResetSettingsHandler::UpdateFeedbackUI() {
179 if (!setting_snapshot_) 186 if (!setting_snapshot_)
180 return; 187 return;
181 scoped_ptr<base::ListValue> list = GetReadableFeedbackForSnapshot( 188 scoped_ptr<base::ListValue> list = GetReadableFeedbackForSnapshot(
182 Profile::FromWebUI(web_ui()), 189 profile_, *setting_snapshot_);
183 *setting_snapshot_);
184 base::DictionaryValue feedback_info; 190 base::DictionaryValue feedback_info;
185 feedback_info.Set("feedbackInfo", list.release()); 191 feedback_info.Set("feedbackInfo", list.release());
186 web_ui()->CallJavascriptFunction( 192 web_ui()->CallJavascriptFunction(
187 "SettingsResetPage.setFeedbackInfo", feedback_info); 193 "SettingsResetPage.setFeedbackInfo", feedback_info);
188 } 194 }
189 195
196 ProfileResetter* ResetSettingsHandler::GetResetter() {
197 if (!resetter_)
198 resetter_.reset(new ProfileResetter(profile_));
199 return resetter_.get();
200 }
201
190 #if defined(OS_CHROMEOS) 202 #if defined(OS_CHROMEOS)
191 void ResetSettingsHandler::OnShowPowerwashDialog( 203 void ResetSettingsHandler::OnShowPowerwashDialog(
192 const base::ListValue* args) { 204 const base::ListValue* args) {
193 UMA_HISTOGRAM_ENUMERATION( 205 UMA_HISTOGRAM_ENUMERATION(
194 "Reset.ChromeOS.PowerwashDialogShown", 206 "Reset.ChromeOS.PowerwashDialogShown",
195 chromeos::reset::DIALOG_FROM_OPTIONS, 207 chromeos::reset::DIALOG_FROM_OPTIONS,
196 chromeos::reset::DIALOG_VIEW_TYPE_SIZE); 208 chromeos::reset::DIALOG_VIEW_TYPE_SIZE);
197 } 209 }
198 210
199 void ResetSettingsHandler::HandleFactoryResetRestart( 211 void ResetSettingsHandler::HandleFactoryResetRestart(
200 const base::ListValue* args) { 212 const base::ListValue* args) {
201 if (!allow_powerwash_) 213 if (!allow_powerwash_)
202 return; 214 return;
203 215
204 PrefService* prefs = g_browser_process->local_state(); 216 PrefService* prefs = g_browser_process->local_state();
205 prefs->SetBoolean(prefs::kFactoryResetRequested, true); 217 prefs->SetBoolean(prefs::kFactoryResetRequested, true);
206 prefs->CommitPendingWrite(); 218 prefs->CommitPendingWrite();
207 219
208 // Perform sign out. Current chrome process will then terminate, new one will 220 // Perform sign out. Current chrome process will then terminate, new one will
209 // be launched (as if it was a restart). 221 // be launched (as if it was a restart).
210 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 222 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
211 } 223 }
212 #endif // defined(OS_CHROMEOS) 224 #endif // defined(OS_CHROMEOS)
213 225
214 } // namespace settings 226 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698