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/options/create_profile_handler.h" | 5 #include "chrome/browser/ui/webui/options/create_profile_handler.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
13 #include "base/metrics/histogram_macros.h" | 13 #include "base/metrics/histogram_macros.h" |
14 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
15 #include "base/value_conversions.h" | 15 #include "base/value_conversions.h" |
16 #include "base/values.h" | 16 #include "base/values.h" |
17 #include "chrome/browser/browser_process.h" | 17 #include "chrome/browser/browser_process.h" |
18 #include "chrome/browser/profiles/profile_attributes_entry.h" | 18 #include "chrome/browser/profiles/profile_attributes_entry.h" |
19 #include "chrome/browser/profiles/profile_attributes_storage.h" | 19 #include "chrome/browser/profiles/profile_attributes_storage.h" |
20 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 20 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
21 #include "chrome/browser/profiles/profile_manager.h" | 21 #include "chrome/browser/profiles/profile_manager.h" |
22 #include "chrome/browser/profiles/profile_metrics.h" | 22 #include "chrome/browser/profiles/profile_metrics.h" |
23 #include "chrome/browser/profiles/profiles_state.h" | 23 #include "chrome/browser/profiles/profiles_state.h" |
24 #include "chrome/browser/sync/profile_sync_service_factory.h" | 24 #include "chrome/browser/sync/profile_sync_service_factory.h" |
25 #include "chrome/browser/ui/webui/profile_helper.h" | 25 #include "chrome/browser/ui/webui/profile_helper.h" |
| 26 #include "chrome/common/features.h" |
26 #include "chrome/common/pref_names.h" | 27 #include "chrome/common/pref_names.h" |
27 #include "chrome/grit/generated_resources.h" | 28 #include "chrome/grit/generated_resources.h" |
28 #include "components/browser_sync/profile_sync_service.h" | 29 #include "components/browser_sync/profile_sync_service.h" |
29 #include "components/prefs/pref_service.h" | 30 #include "components/prefs/pref_service.h" |
30 #include "content/public/browser/web_ui.h" | 31 #include "content/public/browser/web_ui.h" |
31 #include "ui/base/l10n/l10n_util.h" | 32 #include "ui/base/l10n/l10n_util.h" |
32 | 33 |
33 #if defined(ENABLE_SUPERVISED_USERS) | 34 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
34 #include "chrome/browser/supervised_user/legacy/supervised_user_registration_uti
lity.h" | 35 #include "chrome/browser/supervised_user/legacy/supervised_user_registration_uti
lity.h" |
35 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h" | 36 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h" |
36 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service_fac
tory.h" | 37 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service_fac
tory.h" |
37 #include "chrome/browser/supervised_user/supervised_user_service.h" | 38 #include "chrome/browser/supervised_user/supervised_user_service.h" |
38 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" | 39 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
39 #endif | 40 #endif |
40 | 41 |
41 namespace options { | 42 namespace options { |
42 | 43 |
43 CreateProfileHandler::CreateProfileHandler() | 44 CreateProfileHandler::CreateProfileHandler() |
44 : profile_creation_type_(NO_CREATION_IN_PROGRESS), | 45 : profile_creation_type_(NO_CREATION_IN_PROGRESS), |
45 weak_ptr_factory_(this) { | 46 weak_ptr_factory_(this) { |
46 } | 47 } |
47 | 48 |
48 CreateProfileHandler::~CreateProfileHandler() { | 49 CreateProfileHandler::~CreateProfileHandler() { |
49 #if defined(ENABLE_SUPERVISED_USERS) | 50 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
50 // Cancellation is only supported for supervised users. | 51 // Cancellation is only supported for supervised users. |
51 CancelProfileRegistration(false); | 52 CancelProfileRegistration(false); |
52 #endif | 53 #endif |
53 } | 54 } |
54 | 55 |
55 void CreateProfileHandler::GetLocalizedValues( | 56 void CreateProfileHandler::GetLocalizedValues( |
56 base::DictionaryValue* localized_strings) { | 57 base::DictionaryValue* localized_strings) { |
57 } | 58 } |
58 | 59 |
59 void CreateProfileHandler::RegisterMessages() { | 60 void CreateProfileHandler::RegisterMessages() { |
60 #if defined(ENABLE_SUPERVISED_USERS) | 61 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
61 // Cancellation is only supported for supervised users. | 62 // Cancellation is only supported for supervised users. |
62 web_ui()->RegisterMessageCallback( | 63 web_ui()->RegisterMessageCallback( |
63 "cancelCreateProfile", | 64 "cancelCreateProfile", |
64 base::Bind(&CreateProfileHandler::HandleCancelProfileCreation, | 65 base::Bind(&CreateProfileHandler::HandleCancelProfileCreation, |
65 base::Unretained(this))); | 66 base::Unretained(this))); |
66 #endif | 67 #endif |
67 web_ui()->RegisterMessageCallback( | 68 web_ui()->RegisterMessageCallback( |
68 "createProfile", | 69 "createProfile", |
69 base::Bind(&CreateProfileHandler::CreateProfile, | 70 base::Bind(&CreateProfileHandler::CreateProfile, |
70 base::Unretained(this))); | 71 base::Unretained(this))); |
71 } | 72 } |
72 | 73 |
73 void CreateProfileHandler::CreateProfile(const base::ListValue* args) { | 74 void CreateProfileHandler::CreateProfile(const base::ListValue* args) { |
74 #if defined(ENABLE_SUPERVISED_USERS) | 75 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
75 // This handler could have been called for a supervised user, for example | 76 // This handler could have been called for a supervised user, for example |
76 // because the user fiddled with the web inspector. Silently return. | 77 // because the user fiddled with the web inspector. Silently return. |
77 if (Profile::FromWebUI(web_ui())->IsSupervised()) | 78 if (Profile::FromWebUI(web_ui())->IsSupervised()) |
78 return; | 79 return; |
79 #endif | 80 #endif |
80 | 81 |
81 if (!profiles::IsMultipleProfilesEnabled()) | 82 if (!profiles::IsMultipleProfilesEnabled()) |
82 return; | 83 return; |
83 | 84 |
84 // We can have only one in progress profile creation | 85 // We can have only one in progress profile creation |
(...skipping 14 matching lines...) Expand all Loading... |
99 DCHECK(base::IsStringASCII(icon_url)); | 100 DCHECK(base::IsStringASCII(icon_url)); |
100 base::TrimWhitespace(name, base::TRIM_ALL, &name); | 101 base::TrimWhitespace(name, base::TRIM_ALL, &name); |
101 CHECK(!name.empty()); | 102 CHECK(!name.empty()); |
102 #ifndef NDEBUG | 103 #ifndef NDEBUG |
103 size_t icon_index; | 104 size_t icon_index; |
104 DCHECK(profiles::IsDefaultAvatarIconUrl(icon_url, &icon_index)); | 105 DCHECK(profiles::IsDefaultAvatarIconUrl(icon_url, &icon_index)); |
105 #endif | 106 #endif |
106 args->GetBoolean(2, &create_shortcut); | 107 args->GetBoolean(2, &create_shortcut); |
107 } | 108 } |
108 std::string supervised_user_id; | 109 std::string supervised_user_id; |
109 #if defined(ENABLE_SUPERVISED_USERS) | 110 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
110 if (!ProcessSupervisedCreateProfileArgs(args, &supervised_user_id)) | 111 if (!ProcessSupervisedCreateProfileArgs(args, &supervised_user_id)) |
111 return; | 112 return; |
112 #endif | 113 #endif |
113 | 114 |
114 ProfileMetrics::LogProfileAddNewUser(ProfileMetrics::ADD_NEW_USER_DIALOG); | 115 ProfileMetrics::LogProfileAddNewUser(ProfileMetrics::ADD_NEW_USER_DIALOG); |
115 | 116 |
116 profile_path_being_created_ = ProfileManager::CreateMultiProfileAsync( | 117 profile_path_being_created_ = ProfileManager::CreateMultiProfileAsync( |
117 name, icon_url, base::Bind(&CreateProfileHandler::OnProfileCreated, | 118 name, icon_url, base::Bind(&CreateProfileHandler::OnProfileCreated, |
118 weak_ptr_factory_.GetWeakPtr(), | 119 weak_ptr_factory_.GetWeakPtr(), |
119 create_shortcut, supervised_user_id), | 120 create_shortcut, supervised_user_id), |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 void CreateProfileHandler::HandleProfileCreationSuccess( | 159 void CreateProfileHandler::HandleProfileCreationSuccess( |
159 bool create_shortcut, | 160 bool create_shortcut, |
160 const std::string& supervised_user_id, | 161 const std::string& supervised_user_id, |
161 Profile* profile) { | 162 Profile* profile) { |
162 switch (profile_creation_type_) { | 163 switch (profile_creation_type_) { |
163 case NON_SUPERVISED_PROFILE_CREATION: { | 164 case NON_SUPERVISED_PROFILE_CREATION: { |
164 DCHECK(supervised_user_id.empty()); | 165 DCHECK(supervised_user_id.empty()); |
165 CreateShortcutAndShowSuccess(create_shortcut, profile); | 166 CreateShortcutAndShowSuccess(create_shortcut, profile); |
166 break; | 167 break; |
167 } | 168 } |
168 #if defined(ENABLE_SUPERVISED_USERS) | 169 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
169 case SUPERVISED_PROFILE_CREATION: | 170 case SUPERVISED_PROFILE_CREATION: |
170 case SUPERVISED_PROFILE_IMPORT: | 171 case SUPERVISED_PROFILE_IMPORT: |
171 RegisterSupervisedUser(create_shortcut, supervised_user_id, profile); | 172 RegisterSupervisedUser(create_shortcut, supervised_user_id, profile); |
172 break; | 173 break; |
173 #endif | 174 #endif |
174 case NO_CREATION_IN_PROGRESS: | 175 case NO_CREATION_IN_PROGRESS: |
175 NOTREACHED(); | 176 NOTREACHED(); |
176 break; | 177 break; |
177 } | 178 } |
178 } | 179 } |
179 | 180 |
180 void CreateProfileHandler::CreateShortcutAndShowSuccess(bool create_shortcut, | 181 void CreateProfileHandler::CreateShortcutAndShowSuccess(bool create_shortcut, |
181 Profile* profile) { | 182 Profile* profile) { |
182 if (create_shortcut) { | 183 if (create_shortcut) { |
183 ProfileShortcutManager* shortcut_manager = | 184 ProfileShortcutManager* shortcut_manager = |
184 g_browser_process->profile_manager()->profile_shortcut_manager(); | 185 g_browser_process->profile_manager()->profile_shortcut_manager(); |
185 | 186 |
186 if (shortcut_manager) | 187 if (shortcut_manager) |
187 shortcut_manager->CreateProfileShortcut(profile->GetPath()); | 188 shortcut_manager->CreateProfileShortcut(profile->GetPath()); |
188 } | 189 } |
189 | 190 |
190 DCHECK_EQ(profile_path_being_created_.value(), profile->GetPath().value()); | 191 DCHECK_EQ(profile_path_being_created_.value(), profile->GetPath().value()); |
191 profile_path_being_created_.clear(); | 192 profile_path_being_created_.clear(); |
192 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_); | 193 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_); |
193 base::DictionaryValue dict; | 194 base::DictionaryValue dict; |
194 dict.SetString("name", | 195 dict.SetString("name", |
195 profile->GetPrefs()->GetString(prefs::kProfileName)); | 196 profile->GetPrefs()->GetString(prefs::kProfileName)); |
196 dict.Set("filePath", base::CreateFilePathValue(profile->GetPath())); | 197 dict.Set("filePath", base::CreateFilePathValue(profile->GetPath())); |
197 #if defined(ENABLE_SUPERVISED_USERS) | 198 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
198 bool is_supervised = | 199 bool is_supervised = |
199 profile_creation_type_ == SUPERVISED_PROFILE_CREATION || | 200 profile_creation_type_ == SUPERVISED_PROFILE_CREATION || |
200 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT; | 201 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT; |
201 dict.SetBoolean("isSupervised", is_supervised); | 202 dict.SetBoolean("isSupervised", is_supervised); |
202 #endif | 203 #endif |
203 web_ui()->CallJavascriptFunctionUnsafe( | 204 web_ui()->CallJavascriptFunctionUnsafe( |
204 GetJavascriptMethodName(PROFILE_CREATION_SUCCESS), dict); | 205 GetJavascriptMethodName(PROFILE_CREATION_SUCCESS), dict); |
205 | 206 |
206 // If the new profile is a supervised user, instead of opening a new window | 207 // If the new profile is a supervised user, instead of opening a new window |
207 // right away, a confirmation overlay will be shown by JS from the creation | 208 // right away, a confirmation overlay will be shown by JS from the creation |
208 // dialog. If we are importing an existing supervised profile or creating a | 209 // dialog. If we are importing an existing supervised profile or creating a |
209 // new non-supervised user profile we don't show any confirmation, so open | 210 // new non-supervised user profile we don't show any confirmation, so open |
210 // the new window now. | 211 // the new window now. |
211 bool should_open_new_window = true; | 212 bool should_open_new_window = true; |
212 #if defined(ENABLE_SUPERVISED_USERS) | 213 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
213 if (profile_creation_type_ == SUPERVISED_PROFILE_CREATION) | 214 if (profile_creation_type_ == SUPERVISED_PROFILE_CREATION) |
214 should_open_new_window = false; | 215 should_open_new_window = false; |
215 #endif | 216 #endif |
216 | 217 |
217 if (should_open_new_window) { | 218 if (should_open_new_window) { |
218 // Opening the new window must be the last action, after all callbacks | 219 // Opening the new window must be the last action, after all callbacks |
219 // have been run, to give them a chance to initialize the profile. | 220 // have been run, to give them a chance to initialize the profile. |
220 webui::OpenNewWindowForProfile(profile, Profile::CREATE_STATUS_INITIALIZED); | 221 webui::OpenNewWindowForProfile(profile, Profile::CREATE_STATUS_INITIALIZED); |
221 } | 222 } |
222 profile_creation_type_ = NO_CREATION_IN_PROGRESS; | 223 profile_creation_type_ = NO_CREATION_IN_PROGRESS; |
(...skipping 22 matching lines...) Expand all Loading... |
245 status, | 246 status, |
246 Profile::MAX_CREATE_STATUS); | 247 Profile::MAX_CREATE_STATUS); |
247 UMA_HISTOGRAM_MEDIUM_TIMES( | 248 UMA_HISTOGRAM_MEDIUM_TIMES( |
248 "Profile.CreateTimeNoTimeout", | 249 "Profile.CreateTimeNoTimeout", |
249 base::TimeTicks::Now() - profile_creation_start_time_); | 250 base::TimeTicks::Now() - profile_creation_start_time_); |
250 } | 251 } |
251 | 252 |
252 base::string16 CreateProfileHandler::GetProfileCreationErrorMessageLocal() | 253 base::string16 CreateProfileHandler::GetProfileCreationErrorMessageLocal() |
253 const { | 254 const { |
254 int message_id = IDS_PROFILES_CREATE_LOCAL_ERROR; | 255 int message_id = IDS_PROFILES_CREATE_LOCAL_ERROR; |
255 #if defined(ENABLE_SUPERVISED_USERS) | 256 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
256 // Local errors can occur during supervised profile import. | 257 // Local errors can occur during supervised profile import. |
257 if (profile_creation_type_ == SUPERVISED_PROFILE_IMPORT) | 258 if (profile_creation_type_ == SUPERVISED_PROFILE_IMPORT) |
258 message_id = IDS_LEGACY_SUPERVISED_USER_IMPORT_LOCAL_ERROR; | 259 message_id = IDS_LEGACY_SUPERVISED_USER_IMPORT_LOCAL_ERROR; |
259 #endif | 260 #endif |
260 return l10n_util::GetStringUTF16(message_id); | 261 return l10n_util::GetStringUTF16(message_id); |
261 } | 262 } |
262 | 263 |
263 #if defined(ENABLE_SUPERVISED_USERS) | 264 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
264 base::string16 CreateProfileHandler::GetProfileCreationErrorMessageRemote() | 265 base::string16 CreateProfileHandler::GetProfileCreationErrorMessageRemote() |
265 const { | 266 const { |
266 return l10n_util::GetStringUTF16( | 267 return l10n_util::GetStringUTF16( |
267 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? | 268 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
268 IDS_LEGACY_SUPERVISED_USER_IMPORT_REMOTE_ERROR : | 269 IDS_LEGACY_SUPERVISED_USER_IMPORT_REMOTE_ERROR : |
269 IDS_PROFILES_CREATE_REMOTE_ERROR); | 270 IDS_PROFILES_CREATE_REMOTE_ERROR); |
270 } | 271 } |
271 | 272 |
272 base::string16 CreateProfileHandler::GetProfileCreationErrorMessageSignin() | 273 base::string16 CreateProfileHandler::GetProfileCreationErrorMessageSignin() |
273 const { | 274 const { |
274 return l10n_util::GetStringUTF16( | 275 return l10n_util::GetStringUTF16( |
275 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? | 276 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ? |
276 IDS_LEGACY_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR : | 277 IDS_LEGACY_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR : |
277 IDS_PROFILES_CREATE_SIGN_IN_ERROR); | 278 IDS_PROFILES_CREATE_SIGN_IN_ERROR); |
278 } | 279 } |
279 #endif | 280 #endif |
280 | 281 |
281 std::string CreateProfileHandler::GetJavascriptMethodName( | 282 std::string CreateProfileHandler::GetJavascriptMethodName( |
282 ProfileCreationStatus status) const { | 283 ProfileCreationStatus status) const { |
283 switch (profile_creation_type_) { | 284 switch (profile_creation_type_) { |
284 #if defined(ENABLE_SUPERVISED_USERS) | 285 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
285 case SUPERVISED_PROFILE_IMPORT: | 286 case SUPERVISED_PROFILE_IMPORT: |
286 switch (status) { | 287 switch (status) { |
287 case PROFILE_CREATION_SUCCESS: | 288 case PROFILE_CREATION_SUCCESS: |
288 return "BrowserOptions.showSupervisedUserImportSuccess"; | 289 return "BrowserOptions.showSupervisedUserImportSuccess"; |
289 case PROFILE_CREATION_ERROR: | 290 case PROFILE_CREATION_ERROR: |
290 return "BrowserOptions.showSupervisedUserImportError"; | 291 return "BrowserOptions.showSupervisedUserImportError"; |
291 } | 292 } |
292 break; | 293 break; |
293 #endif | 294 #endif |
294 default: | 295 default: |
295 switch (status) { | 296 switch (status) { |
296 case PROFILE_CREATION_SUCCESS: | 297 case PROFILE_CREATION_SUCCESS: |
297 return "BrowserOptions.showCreateProfileSuccess"; | 298 return "BrowserOptions.showCreateProfileSuccess"; |
298 case PROFILE_CREATION_ERROR: | 299 case PROFILE_CREATION_ERROR: |
299 return "BrowserOptions.showCreateProfileError"; | 300 return "BrowserOptions.showCreateProfileError"; |
300 } | 301 } |
301 break; | 302 break; |
302 } | 303 } |
303 | 304 |
304 NOTREACHED(); | 305 NOTREACHED(); |
305 return std::string(); | 306 return std::string(); |
306 } | 307 } |
307 | 308 |
308 #if defined(ENABLE_SUPERVISED_USERS) | 309 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) |
309 bool CreateProfileHandler::ProcessSupervisedCreateProfileArgs( | 310 bool CreateProfileHandler::ProcessSupervisedCreateProfileArgs( |
310 const base::ListValue* args, std::string* supervised_user_id) { | 311 const base::ListValue* args, std::string* supervised_user_id) { |
311 bool supervised_user = false; | 312 bool supervised_user = false; |
312 if (args->GetSize() >= 5) { | 313 if (args->GetSize() >= 5) { |
313 bool success = args->GetBoolean(3, &supervised_user); | 314 bool success = args->GetBoolean(3, &supervised_user); |
314 DCHECK(success); | 315 DCHECK(success); |
315 | 316 |
316 success = args->GetString(4, supervised_user_id); | 317 success = args->GetString(4, supervised_user_id); |
317 DCHECK(success); | 318 DCHECK(success); |
318 } | 319 } |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 GetProfileAttributesStorage().GetAllProfilesAttributes(); | 475 GetProfileAttributesStorage().GetAllProfilesAttributes(); |
475 for (const ProfileAttributesEntry* entry : entries) { | 476 for (const ProfileAttributesEntry* entry : entries) { |
476 if (existing_supervised_user_id == entry->GetSupervisedUserId()) | 477 if (existing_supervised_user_id == entry->GetSupervisedUserId()) |
477 return false; | 478 return false; |
478 } | 479 } |
479 return true; | 480 return true; |
480 } | 481 } |
481 #endif | 482 #endif |
482 | 483 |
483 } // namespace options | 484 } // namespace options |
OLD | NEW |