OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |