Chromium Code Reviews| 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" |
| 11 #include "base/metrics/histogram_macros.h" | 11 #include "base/metrics/histogram_macros.h" |
| 12 #include "base/strings/string16.h" | 12 #include "base/strings/string16.h" |
| 13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 14 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "build/build_config.h" | 15 #include "build/build_config.h" |
| 16 #include "chrome/browser/google/google_brand.h" | 16 #include "chrome/browser/google/google_brand.h" |
| 17 #include "chrome/browser/prefs/chrome_pref_service_factory.h" | 17 #include "chrome/browser/prefs/chrome_pref_service_factory.h" |
| 18 #include "chrome/browser/profile_resetter/brandcode_config_fetcher.h" | 18 #include "chrome/browser/profile_resetter/brandcode_config_fetcher.h" |
| 19 #include "chrome/browser/profile_resetter/brandcoded_default_settings.h" | 19 #include "chrome/browser/profile_resetter/brandcoded_default_settings.h" |
| 20 #include "chrome/browser/profile_resetter/profile_reset_report.pb.h" | |
| 21 #include "chrome/browser/profile_resetter/profile_resetter.h" | 20 #include "chrome/browser/profile_resetter/profile_resetter.h" |
| 22 #include "chrome/browser/profile_resetter/resettable_settings_snapshot.h" | 21 #include "chrome/browser/profile_resetter/resettable_settings_snapshot.h" |
| 23 #include "chrome/browser/profiles/profile.h" | 22 #include "chrome/browser/profiles/profile.h" |
| 24 #include "chrome/common/url_constants.h" | 23 #include "chrome/common/url_constants.h" |
| 25 #include "chrome/grit/generated_resources.h" | 24 #include "chrome/grit/generated_resources.h" |
| 26 #include "components/prefs/pref_service.h" | 25 #include "components/prefs/pref_service.h" |
| 27 #include "content/public/browser/user_metrics.h" | 26 #include "content/public/browser/user_metrics.h" |
| 28 #include "content/public/browser/web_ui.h" | 27 #include "content/public/browser/web_ui.h" |
| 29 #include "content/public/browser/web_ui_data_source.h" | 28 #include "content/public/browser/web_ui_data_source.h" |
| 30 #include "ui/base/l10n/l10n_util.h" | 29 #include "ui/base/l10n/l10n_util.h" |
| 31 | 30 |
| 32 #if defined(OS_CHROMEOS) | 31 #if defined(OS_CHROMEOS) |
| 33 #include "chrome/browser/browser_process.h" | 32 #include "chrome/browser/browser_process.h" |
| 34 #include "chrome/browser/browser_process_platform_part.h" | 33 #include "chrome/browser/browser_process_platform_part.h" |
| 35 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" | 34 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
| 36 #include "chrome/browser/chromeos/reset/metrics.h" | 35 #include "chrome/browser/chromeos/reset/metrics.h" |
| 37 #include "chrome/common/pref_names.h" | 36 #include "chrome/common/pref_names.h" |
| 38 #include "components/user_manager/user_manager.h" | 37 #include "components/user_manager/user_manager.h" |
| 39 #endif // defined(OS_CHROMEOS) | 38 #endif // defined(OS_CHROMEOS) |
| 40 | 39 |
| 41 #if defined(OS_WIN) | 40 #if defined(OS_WIN) |
| 42 #include "chrome/browser/profile_resetter/triggered_profile_resetter.h" | 41 #include "chrome/browser/profile_resetter/triggered_profile_resetter.h" |
| 43 #include "chrome/browser/profile_resetter/triggered_profile_resetter_factory.h" | 42 #include "chrome/browser/profile_resetter/triggered_profile_resetter_factory.h" |
| 44 #endif // defined(OS_WIN) | 43 #endif // defined(OS_WIN) |
| 45 | 44 |
| 46 namespace settings { | 45 namespace settings { |
| 47 | 46 |
| 47 namespace { | |
| 48 | |
| 49 reset_report::ChromeResetReport::ResetRequestOrigin | |
| 50 ResetRequestOriginFromString(const std::string& request_origin) { | |
| 51 static const char kOriginUserClick[] = "userclick"; | |
| 52 static const char kOriginTriggeredReset[] = "triggeredreset"; | |
| 53 | |
| 54 if (request_origin == ResetSettingsHandler::kCctResetSettingsHash) | |
| 55 return reset_report::ChromeResetReport::RESET_REQUEST_ORIGIN_CCT; | |
| 56 if (request_origin == kOriginUserClick) | |
| 57 return reset_report::ChromeResetReport::RESET_REQUEST_ORIGIN_USER_CLICK; | |
| 58 if (request_origin == kOriginTriggeredReset) { | |
| 59 return reset_report::ChromeResetReport:: | |
| 60 RESET_REQUEST_ORIGIN_TRIGGERED_RESET; | |
| 61 } | |
| 62 if (!request_origin.empty()) | |
|
hcarmona
2016/10/13 20:30:20
Is an empty request_origin allowed?
alito
2016/10/13 21:27:28
Yes. It signals that the origin is UNKNOWN.
hcarmona
2016/10/13 23:37:54
Sounds good. :-)
| |
| 63 NOTREACHED(); | |
| 64 | |
| 65 return reset_report::ChromeResetReport::RESET_REQUEST_ORIGIN_UNKNOWN; | |
| 66 } | |
| 67 | |
| 68 } // namespace | |
| 69 | |
| 70 const char ResetSettingsHandler::kCctResetSettingsHash[] = "cct"; | |
| 71 | |
| 48 ResetSettingsHandler::ResetSettingsHandler(Profile* profile) | 72 ResetSettingsHandler::ResetSettingsHandler(Profile* profile) |
| 49 : profile_(profile), weak_ptr_factory_(this) { | 73 : profile_(profile), weak_ptr_factory_(this) { |
| 50 google_brand::GetBrand(&brandcode_); | 74 google_brand::GetBrand(&brandcode_); |
| 51 } | 75 } |
| 52 | 76 |
| 53 ResetSettingsHandler::~ResetSettingsHandler() {} | 77 ResetSettingsHandler::~ResetSettingsHandler() {} |
| 54 | 78 |
| 55 ResetSettingsHandler* ResetSettingsHandler::Create( | 79 ResetSettingsHandler* ResetSettingsHandler::Create( |
| 56 content::WebUIDataSource* html_source, Profile* profile) { | 80 content::WebUIDataSource* html_source, Profile* profile) { |
| 57 #if defined(OS_CHROMEOS) | 81 #if defined(OS_CHROMEOS) |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 101 "onPowerwashDialogShow", | 125 "onPowerwashDialogShow", |
| 102 base::Bind(&ResetSettingsHandler::OnShowPowerwashDialog, | 126 base::Bind(&ResetSettingsHandler::OnShowPowerwashDialog, |
| 103 base::Unretained(this))); | 127 base::Unretained(this))); |
| 104 #endif // defined(OS_CHROMEOS) | 128 #endif // defined(OS_CHROMEOS) |
| 105 } | 129 } |
| 106 | 130 |
| 107 void ResetSettingsHandler::HandleResetProfileSettings( | 131 void ResetSettingsHandler::HandleResetProfileSettings( |
| 108 const base::ListValue* args) { | 132 const base::ListValue* args) { |
| 109 AllowJavascript(); | 133 AllowJavascript(); |
| 110 | 134 |
| 111 CHECK_EQ(2U, args->GetSize()); | 135 CHECK_EQ(3U, args->GetSize()); |
| 112 std::string callback_id; | 136 std::string callback_id; |
| 113 CHECK(args->GetString(0, &callback_id)); | 137 CHECK(args->GetString(0, &callback_id)); |
| 114 bool send_settings = false; | 138 bool send_settings = false; |
| 115 CHECK(args->GetBoolean(1, &send_settings)); | 139 CHECK(args->GetBoolean(1, &send_settings)); |
| 140 std::string request_origin_string; | |
| 141 CHECK(args->GetString(2, &request_origin_string)); | |
| 142 reset_report::ChromeResetReport::ResetRequestOrigin request_origin = | |
| 143 ResetRequestOriginFromString(request_origin_string); | |
| 116 | 144 |
| 117 DCHECK(brandcode_.empty() || config_fetcher_); | 145 DCHECK(brandcode_.empty() || config_fetcher_); |
| 118 if (config_fetcher_ && config_fetcher_->IsActive()) { | 146 if (config_fetcher_ && config_fetcher_->IsActive()) { |
| 119 // Reset once the prefs are fetched. | 147 // Reset once the prefs are fetched. |
| 120 config_fetcher_->SetCallback( | 148 config_fetcher_->SetCallback(base::Bind(&ResetSettingsHandler::ResetProfile, |
| 121 base::Bind(&ResetSettingsHandler::ResetProfile, | 149 base::Unretained(this), callback_id, |
| 122 base::Unretained(this), | 150 send_settings, request_origin)); |
| 123 callback_id, | |
| 124 send_settings)); | |
| 125 } else { | 151 } else { |
| 126 ResetProfile(callback_id, send_settings); | 152 ResetProfile(callback_id, send_settings, request_origin); |
| 127 } | 153 } |
| 128 } | 154 } |
| 129 | 155 |
| 130 void ResetSettingsHandler::OnResetProfileSettingsDone( | 156 void ResetSettingsHandler::OnResetProfileSettingsDone( |
| 131 std::string callback_id, bool send_feedback) { | 157 std::string callback_id, |
| 158 bool send_feedback, | |
| 159 reset_report::ChromeResetReport::ResetRequestOrigin request_origin) { | |
| 132 ResolveJavascriptCallback( | 160 ResolveJavascriptCallback( |
| 133 base::StringValue(callback_id), *base::Value::CreateNullValue()); | 161 base::StringValue(callback_id), *base::Value::CreateNullValue()); |
| 134 if (send_feedback && setting_snapshot_) { | 162 if (send_feedback && setting_snapshot_) { |
| 135 ResettableSettingsSnapshot current_snapshot(profile_); | 163 ResettableSettingsSnapshot current_snapshot(profile_); |
| 136 int difference = setting_snapshot_->FindDifferentFields(current_snapshot); | 164 int difference = setting_snapshot_->FindDifferentFields(current_snapshot); |
| 137 if (difference) { | 165 if (difference) { |
| 138 setting_snapshot_->Subtract(current_snapshot); | 166 setting_snapshot_->Subtract(current_snapshot); |
| 139 std::unique_ptr<reset_report::ChromeResetReport> report_proto = | 167 std::unique_ptr<reset_report::ChromeResetReport> report_proto = |
| 140 SerializeSettingsReportToProto(*setting_snapshot_, difference); | 168 SerializeSettingsReportToProto(*setting_snapshot_, difference); |
| 141 if (report_proto) { | 169 if (report_proto) { |
| 142 // The material design version of the settings page currently does not | 170 report_proto->set_reset_request_origin(request_origin); |
| 143 // expose the alternative ways, made available by the old settings page, | |
| 144 // to get to the reset settings dialog. Until those are available, we | |
| 145 // can assume that all reset requests came directly from user | |
| 146 // navigation. | |
| 147 report_proto->set_reset_request_origin( | |
| 148 reset_report::ChromeResetReport::RESET_REQUEST_ORIGIN_USER_CLICK); | |
| 149 SendSettingsFeedbackProto(*report_proto, profile_); | 171 SendSettingsFeedbackProto(*report_proto, profile_); |
| 150 } | 172 } |
| 151 } | 173 } |
| 152 } | 174 } |
| 153 setting_snapshot_.reset(); | 175 setting_snapshot_.reset(); |
| 154 } | 176 } |
| 155 | 177 |
| 156 void ResetSettingsHandler::HandleGetReportedSettings( | 178 void ResetSettingsHandler::HandleGetReportedSettings( |
| 157 const base::ListValue* args) { | 179 const base::ListValue* args) { |
| 158 AllowJavascript(); | 180 AllowJavascript(); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 const base::ListValue* args) { | 220 const base::ListValue* args) { |
| 199 chrome_prefs::ClearResetTime(profile_); | 221 chrome_prefs::ClearResetTime(profile_); |
| 200 } | 222 } |
| 201 | 223 |
| 202 void ResetSettingsHandler::OnSettingsFetched() { | 224 void ResetSettingsHandler::OnSettingsFetched() { |
| 203 DCHECK(config_fetcher_); | 225 DCHECK(config_fetcher_); |
| 204 DCHECK(!config_fetcher_->IsActive()); | 226 DCHECK(!config_fetcher_->IsActive()); |
| 205 // The master prefs is fetched. We are waiting for user pressing 'Reset'. | 227 // The master prefs is fetched. We are waiting for user pressing 'Reset'. |
| 206 } | 228 } |
| 207 | 229 |
| 208 void ResetSettingsHandler::ResetProfile(std::string callback_id, | 230 void ResetSettingsHandler::ResetProfile( |
| 209 bool send_settings) { | 231 std::string callback_id, |
| 232 bool send_settings, | |
| 233 reset_report::ChromeResetReport::ResetRequestOrigin request_origin) { | |
| 210 DCHECK(!GetResetter()->IsActive()); | 234 DCHECK(!GetResetter()->IsActive()); |
| 211 | 235 |
| 212 std::unique_ptr<BrandcodedDefaultSettings> default_settings; | 236 std::unique_ptr<BrandcodedDefaultSettings> default_settings; |
| 213 if (config_fetcher_) { | 237 if (config_fetcher_) { |
| 214 DCHECK(!config_fetcher_->IsActive()); | 238 DCHECK(!config_fetcher_->IsActive()); |
| 215 default_settings = config_fetcher_->GetSettings(); | 239 default_settings = config_fetcher_->GetSettings(); |
| 216 config_fetcher_.reset(); | 240 config_fetcher_.reset(); |
| 217 } else { | 241 } else { |
| 218 DCHECK(brandcode_.empty()); | 242 DCHECK(brandcode_.empty()); |
| 219 } | 243 } |
| 220 | 244 |
| 221 // If failed to fetch BrandcodedDefaultSettings or this is an organic | 245 // If failed to fetch BrandcodedDefaultSettings or this is an organic |
| 222 // installation, use default settings. | 246 // installation, use default settings. |
| 223 if (!default_settings) | 247 if (!default_settings) |
| 224 default_settings.reset(new BrandcodedDefaultSettings); | 248 default_settings.reset(new BrandcodedDefaultSettings); |
| 225 | 249 |
| 226 GetResetter()->Reset( | 250 GetResetter()->Reset( |
| 227 ProfileResetter::ALL, std::move(default_settings), | 251 ProfileResetter::ALL, std::move(default_settings), |
| 228 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone, | 252 base::Bind(&ResetSettingsHandler::OnResetProfileSettingsDone, |
| 229 weak_ptr_factory_.GetWeakPtr(), | 253 weak_ptr_factory_.GetWeakPtr(), callback_id, send_settings, |
| 230 callback_id, | 254 request_origin)); |
| 231 send_settings)); | |
| 232 content::RecordAction(base::UserMetricsAction("ResetProfile")); | 255 content::RecordAction(base::UserMetricsAction("ResetProfile")); |
| 233 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings); | 256 UMA_HISTOGRAM_BOOLEAN("ProfileReset.SendFeedback", send_settings); |
| 234 } | 257 } |
| 235 | 258 |
| 236 ProfileResetter* ResetSettingsHandler::GetResetter() { | 259 ProfileResetter* ResetSettingsHandler::GetResetter() { |
| 237 if (!resetter_) | 260 if (!resetter_) |
| 238 resetter_.reset(new ProfileResetter(profile_)); | 261 resetter_.reset(new ProfileResetter(profile_)); |
| 239 return resetter_.get(); | 262 return resetter_.get(); |
| 240 } | 263 } |
| 241 | 264 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 276 void ResetSettingsHandler::OnShowPowerwashDialog( | 299 void ResetSettingsHandler::OnShowPowerwashDialog( |
| 277 const base::ListValue* args) { | 300 const base::ListValue* args) { |
| 278 UMA_HISTOGRAM_ENUMERATION( | 301 UMA_HISTOGRAM_ENUMERATION( |
| 279 "Reset.ChromeOS.PowerwashDialogShown", | 302 "Reset.ChromeOS.PowerwashDialogShown", |
| 280 chromeos::reset::DIALOG_FROM_OPTIONS, | 303 chromeos::reset::DIALOG_FROM_OPTIONS, |
| 281 chromeos::reset::DIALOG_VIEW_TYPE_SIZE); | 304 chromeos::reset::DIALOG_VIEW_TYPE_SIZE); |
| 282 } | 305 } |
| 283 #endif // defined(OS_CHROMEOS) | 306 #endif // defined(OS_CHROMEOS) |
| 284 | 307 |
| 285 } // namespace settings | 308 } // namespace settings |
| OLD | NEW |