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