| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 base::Bind(&ResetSettingsHandler::OnShowPowerwashDialog, | 103 base::Bind(&ResetSettingsHandler::OnShowPowerwashDialog, |
| 104 base::Unretained(this))); | 104 base::Unretained(this))); |
| 105 web_ui()->RegisterMessageCallback( | 105 web_ui()->RegisterMessageCallback( |
| 106 "requestFactoryResetRestart", | 106 "requestFactoryResetRestart", |
| 107 base::Bind(&ResetSettingsHandler::HandleFactoryResetRestart, | 107 base::Bind(&ResetSettingsHandler::HandleFactoryResetRestart, |
| 108 base::Unretained(this))); | 108 base::Unretained(this))); |
| 109 #endif // defined(OS_CHROMEOS) | 109 #endif // defined(OS_CHROMEOS) |
| 110 } | 110 } |
| 111 | 111 |
| 112 void ResetSettingsHandler::HandleResetProfileSettings( | 112 void ResetSettingsHandler::HandleResetProfileSettings( |
| 113 const base::ListValue* value) { | 113 const base::ListValue* args) { |
| 114 CHECK_EQ(2U, args->GetSize()); |
| 115 std::string callback_id; |
| 116 CHECK(args->GetString(0, &callback_id)); |
| 114 bool send_settings = false; | 117 bool send_settings = false; |
| 115 bool success = value->GetBoolean(0, &send_settings); | 118 CHECK(args->GetBoolean(1, &send_settings)); |
| 116 DCHECK(success); | |
| 117 | 119 |
| 118 DCHECK(brandcode_.empty() || config_fetcher_); | 120 DCHECK(brandcode_.empty() || config_fetcher_); |
| 119 if (config_fetcher_ && config_fetcher_->IsActive()) { | 121 if (config_fetcher_ && config_fetcher_->IsActive()) { |
| 120 // Reset once the prefs are fetched. | 122 // Reset once the prefs are fetched. |
| 121 config_fetcher_->SetCallback( | 123 config_fetcher_->SetCallback( |
| 122 base::Bind(&ResetSettingsHandler::ResetProfile, | 124 base::Bind(&ResetSettingsHandler::ResetProfile, |
| 123 base::Unretained(this), | 125 base::Unretained(this), |
| 126 callback_id, |
| 124 send_settings)); | 127 send_settings)); |
| 125 } else { | 128 } else { |
| 126 ResetProfile(send_settings); | 129 ResetProfile(callback_id, send_settings); |
| 127 } | 130 } |
| 128 } | 131 } |
| 129 | 132 |
| 130 void ResetSettingsHandler::OnResetProfileSettingsDone( | 133 void ResetSettingsHandler::OnResetProfileSettingsDone( |
| 131 bool send_feedback) { | 134 std::string callback_id, bool send_feedback) { |
| 132 web_ui()->CallJavascriptFunction("SettingsResetPage.doneResetting"); | 135 ResolveJavascriptCallback( |
| 136 base::StringValue(callback_id), *base::Value::CreateNullValue()); |
| 133 if (send_feedback && setting_snapshot_) { | 137 if (send_feedback && setting_snapshot_) { |
| 134 ResettableSettingsSnapshot current_snapshot(profile_); | 138 ResettableSettingsSnapshot current_snapshot(profile_); |
| 135 int difference = setting_snapshot_->FindDifferentFields(current_snapshot); | 139 int difference = setting_snapshot_->FindDifferentFields(current_snapshot); |
| 136 if (difference) { | 140 if (difference) { |
| 137 setting_snapshot_->Subtract(current_snapshot); | 141 setting_snapshot_->Subtract(current_snapshot); |
| 138 scoped_ptr<reset_report::ChromeResetReport> report_proto = | 142 scoped_ptr<reset_report::ChromeResetReport> report_proto = |
| 139 SerializeSettingsReportToProto(*setting_snapshot_, difference); | 143 SerializeSettingsReportToProto(*setting_snapshot_, difference); |
| 140 if (report_proto) | 144 if (report_proto) |
| 141 SendSettingsFeedbackProto(*report_proto, profile_); | 145 SendSettingsFeedbackProto(*report_proto, profile_); |
| 142 } | 146 } |
| 143 } | 147 } |
| 144 setting_snapshot_.reset(); | 148 setting_snapshot_.reset(); |
| 145 } | 149 } |
| 146 | 150 |
| 147 void ResetSettingsHandler::OnShowResetProfileDialog( | 151 void ResetSettingsHandler::OnShowResetProfileDialog( |
| 148 const base::ListValue* value) { | 152 const base::ListValue* args) { |
| 149 if (!GetResetter()->IsActive()) { | 153 if (!GetResetter()->IsActive()) { |
| 150 setting_snapshot_.reset(new ResettableSettingsSnapshot(profile_)); | 154 setting_snapshot_.reset(new ResettableSettingsSnapshot(profile_)); |
| 151 setting_snapshot_->RequestShortcuts(base::Bind( | 155 setting_snapshot_->RequestShortcuts(base::Bind( |
| 152 &ResetSettingsHandler::UpdateFeedbackUI, | 156 &ResetSettingsHandler::UpdateFeedbackUI, |
| 153 weak_ptr_factory_.GetWeakPtr())); | 157 weak_ptr_factory_.GetWeakPtr())); |
| 154 UpdateFeedbackUI(); | 158 UpdateFeedbackUI(); |
| 155 } | 159 } |
| 156 | 160 |
| 157 if (brandcode_.empty()) | 161 if (brandcode_.empty()) |
| 158 return; | 162 return; |
| 159 config_fetcher_.reset(new BrandcodeConfigFetcher( | 163 config_fetcher_.reset(new BrandcodeConfigFetcher( |
| 160 base::Bind(&ResetSettingsHandler::OnSettingsFetched, | 164 base::Bind(&ResetSettingsHandler::OnSettingsFetched, |
| 161 base::Unretained(this)), | 165 base::Unretained(this)), |
| 162 GURL("https://tools.google.com/service/update2"), | 166 GURL("https://tools.google.com/service/update2"), |
| 163 brandcode_)); | 167 brandcode_)); |
| 164 } | 168 } |
| 165 | 169 |
| 166 void ResetSettingsHandler::OnHideResetProfileDialog( | 170 void ResetSettingsHandler::OnHideResetProfileDialog( |
| 167 const base::ListValue* value) { | 171 const base::ListValue* args) { |
| 168 if (!GetResetter()->IsActive()) | 172 if (!GetResetter()->IsActive()) |
| 169 setting_snapshot_.reset(); | 173 setting_snapshot_.reset(); |
| 170 } | 174 } |
| 171 | 175 |
| 172 void ResetSettingsHandler::OnHideResetProfileBanner( | 176 void ResetSettingsHandler::OnHideResetProfileBanner( |
| 173 const base::ListValue* value) { | 177 const base::ListValue* args) { |
| 174 chrome_prefs::ClearResetTime(profile_); | 178 chrome_prefs::ClearResetTime(profile_); |
| 175 } | 179 } |
| 176 | 180 |
| 177 void ResetSettingsHandler::OnSettingsFetched() { | 181 void ResetSettingsHandler::OnSettingsFetched() { |
| 178 DCHECK(config_fetcher_); | 182 DCHECK(config_fetcher_); |
| 179 DCHECK(!config_fetcher_->IsActive()); | 183 DCHECK(!config_fetcher_->IsActive()); |
| 180 // The master prefs is fetched. We are waiting for user pressing 'Reset'. | 184 // The master prefs is fetched. We are waiting for user pressing 'Reset'. |
| 181 } | 185 } |
| 182 | 186 |
| 183 void ResetSettingsHandler::ResetProfile(bool send_settings) { | 187 void ResetSettingsHandler::ResetProfile(std::string callback_id, |
| 188 bool send_settings) { |
| 184 DCHECK(!GetResetter()->IsActive()); | 189 DCHECK(!GetResetter()->IsActive()); |
| 185 | 190 |
| 186 scoped_ptr<BrandcodedDefaultSettings> default_settings; | 191 scoped_ptr<BrandcodedDefaultSettings> default_settings; |
| 187 if (config_fetcher_) { | 192 if (config_fetcher_) { |
| 188 DCHECK(!config_fetcher_->IsActive()); | 193 DCHECK(!config_fetcher_->IsActive()); |
| 189 default_settings = config_fetcher_->GetSettings(); | 194 default_settings = config_fetcher_->GetSettings(); |
| 190 config_fetcher_.reset(); | 195 config_fetcher_.reset(); |
| 191 } else { | 196 } else { |
| 192 DCHECK(brandcode_.empty()); | 197 DCHECK(brandcode_.empty()); |
| 193 } | 198 } |
| 194 | 199 |
| 195 // If failed to fetch BrandcodedDefaultSettings or this is an organic | 200 // If failed to fetch BrandcodedDefaultSettings or this is an organic |
| 196 // installation, use default settings. | 201 // installation, use default settings. |
| 197 if (!default_settings) | 202 if (!default_settings) |
| 198 default_settings.reset(new BrandcodedDefaultSettings); | 203 default_settings.reset(new BrandcodedDefaultSettings); |
| 199 | 204 |
| 200 GetResetter()->Reset( | 205 GetResetter()->Reset( |
| 201 ProfileResetter::ALL, std::move(default_settings), | 206 ProfileResetter::ALL, std::move(default_settings), |
| 202 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone, | 207 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone, |
| 203 weak_ptr_factory_.GetWeakPtr(), | 208 weak_ptr_factory_.GetWeakPtr(), |
| 209 callback_id, |
| 204 send_settings)); | 210 send_settings)); |
| 205 content::RecordAction(base::UserMetricsAction("ResetProfile")); | 211 content::RecordAction(base::UserMetricsAction("ResetProfile")); |
| 206 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings); | 212 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings); |
| 207 } | 213 } |
| 208 | 214 |
| 209 void ResetSettingsHandler::UpdateFeedbackUI() { | 215 void ResetSettingsHandler::UpdateFeedbackUI() { |
| 210 if (!setting_snapshot_) | 216 if (!setting_snapshot_) |
| 211 return; | 217 return; |
| 212 scoped_ptr<base::ListValue> list = GetReadableFeedbackForSnapshot( | 218 scoped_ptr<base::ListValue> list = GetReadableFeedbackForSnapshot( |
| 213 profile_, *setting_snapshot_); | 219 profile_, *setting_snapshot_); |
| 214 base::DictionaryValue feedback_info; | 220 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", |
| 215 feedback_info.Set("feedbackInfo", list.release()); | 221 base::StringValue("feedback-info-changed"), |
| 216 web_ui()->CallJavascriptFunction( | 222 *list.release()); |
| 217 "SettingsResetPage.setFeedbackInfo", feedback_info); | |
| 218 } | 223 } |
| 219 | 224 |
| 220 ProfileResetter* ResetSettingsHandler::GetResetter() { | 225 ProfileResetter* ResetSettingsHandler::GetResetter() { |
| 221 if (!resetter_) | 226 if (!resetter_) |
| 222 resetter_.reset(new ProfileResetter(profile_)); | 227 resetter_.reset(new ProfileResetter(profile_)); |
| 223 return resetter_.get(); | 228 return resetter_.get(); |
| 224 } | 229 } |
| 225 | 230 |
| 226 #if defined(OS_CHROMEOS) | 231 #if defined(OS_CHROMEOS) |
| 227 void ResetSettingsHandler::OnShowPowerwashDialog( | 232 void ResetSettingsHandler::OnShowPowerwashDialog( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 241 prefs->SetBoolean(prefs::kFactoryResetRequested, true); | 246 prefs->SetBoolean(prefs::kFactoryResetRequested, true); |
| 242 prefs->CommitPendingWrite(); | 247 prefs->CommitPendingWrite(); |
| 243 | 248 |
| 244 // Perform sign out. Current chrome process will then terminate, new one will | 249 // Perform sign out. Current chrome process will then terminate, new one will |
| 245 // be launched (as if it was a restart). | 250 // be launched (as if it was a restart). |
| 246 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); | 251 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); |
| 247 } | 252 } |
| 248 #endif // defined(OS_CHROMEOS) | 253 #endif // defined(OS_CHROMEOS) |
| 249 | 254 |
| 250 } // namespace settings | 255 } // namespace settings |
| OLD | NEW |