Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: chrome/browser/ui/webui/options/create_profile_handler.cc

Issue 355233002: Fix build when ENABLE_MANAGED_USERS is not defined (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nits, minor refactoring Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.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"
11 #include "base/value_conversions.h" 11 #include "base/value_conversions.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/profiles/profile_manager.h" 14 #include "chrome/browser/profiles/profile_manager.h"
15 #include "chrome/browser/profiles/profile_metrics.h" 15 #include "chrome/browser/profiles/profile_metrics.h"
16 #include "chrome/browser/profiles/profiles_state.h" 16 #include "chrome/browser/profiles/profiles_state.h"
17 #include "chrome/browser/sync/profile_sync_service.h"
18 #include "chrome/browser/sync/profile_sync_service_factory.h"
19 #include "chrome/browser/ui/webui/options/options_handlers_helper.h"
20 #include "chrome/common/pref_names.h"
21 #include "content/public/browser/web_ui.h"
22 #include "grit/generated_resources.h"
23 #include "ui/base/l10n/l10n_util.h"
24
25 #if defined(ENABLE_MANAGED_USERS)
Bernhard Bauer 2014/07/14 16:39:05 This file is a bit pushing it with regards to the
mckev 2014/07/14 23:50:03 I tend to agree - this is a huge number of #ifdefs
Bernhard Bauer 2014/07/16 09:54:00 Maybe -- it's a bit tricky of course, because our
17 #include "chrome/browser/supervised_user/supervised_user_registration_utility.h" 26 #include "chrome/browser/supervised_user/supervised_user_registration_utility.h"
18 #include "chrome/browser/supervised_user/supervised_user_service.h" 27 #include "chrome/browser/supervised_user/supervised_user_service.h"
19 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" 28 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
20 #include "chrome/browser/supervised_user/supervised_user_sync_service.h" 29 #include "chrome/browser/supervised_user/supervised_user_sync_service.h"
21 #include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h" 30 #include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h"
22 #include "chrome/browser/sync/profile_sync_service.h" 31 #endif
23 #include "chrome/browser/sync/profile_sync_service_factory.h"
24 #include "chrome/browser/ui/webui/options/options_handlers_helper.h"
25 #include "chrome/common/pref_names.h"
26 #include "grit/generated_resources.h"
27 #include "ui/base/l10n/l10n_util.h"
28 32
29 namespace options { 33 namespace options {
30 34
31 CreateProfileHandler::CreateProfileHandler() 35 CreateProfileHandler::CreateProfileHandler()
32 : profile_creation_type_(NO_CREATION_IN_PROGRESS), 36 : profile_creation_type_(NO_CREATION_IN_PROGRESS),
33 weak_ptr_factory_(this) { 37 weak_ptr_factory_(this) {
34 } 38 }
35 39
36 CreateProfileHandler::~CreateProfileHandler() { 40 CreateProfileHandler::~CreateProfileHandler() {
37 CancelProfileRegistration(false); 41 CancelProfileRegistration(false);
38 } 42 }
39 43
40 void CreateProfileHandler::GetLocalizedValues( 44 void CreateProfileHandler::GetLocalizedValues(
41 base::DictionaryValue* localized_strings) { 45 base::DictionaryValue* localized_strings) {
42 } 46 }
43 47
44 void CreateProfileHandler::RegisterMessages() { 48 void CreateProfileHandler::RegisterMessages() {
45 web_ui()->RegisterMessageCallback( 49 web_ui()->RegisterMessageCallback(
46 "cancelCreateProfile", 50 "cancelCreateProfile",
47 base::Bind(&CreateProfileHandler::HandleCancelProfileCreation, 51 base::Bind(&CreateProfileHandler::HandleCancelProfileCreation,
48 base::Unretained(this))); 52 base::Unretained(this)));
49 web_ui()->RegisterMessageCallback( 53 web_ui()->RegisterMessageCallback(
50 "createProfile", 54 "createProfile",
51 base::Bind(&CreateProfileHandler::CreateProfile, 55 base::Bind(&CreateProfileHandler::CreateProfile,
52 base::Unretained(this))); 56 base::Unretained(this)));
53 } 57 }
54 58
55 void CreateProfileHandler::CreateProfile(const base::ListValue* args) { 59 void CreateProfileHandler::CreateProfile(const base::ListValue* args) {
60 #if defined(ENABLE_MANAGED_USERS)
56 // This handler could have been called for a supervised user, for example 61 // This handler could have been called for a supervised user, for example
57 // because the user fiddled with the web inspector. Silently return in this 62 // because the user fiddled with the web inspector. Silently return.
58 // case. 63 if (Profile::FromWebUI(web_ui())->IsSupervised())
59 Profile* current_profile = Profile::FromWebUI(web_ui());
60 if (current_profile->IsSupervised())
61 return; 64 return;
65 #endif
62 66
63 if (!profiles::IsMultipleProfilesEnabled()) 67 if (!profiles::IsMultipleProfilesEnabled())
64 return; 68 return;
65 69
66 // We can have only one in progress profile creation 70 // We can have only one in progress profile creation
67 // at any given moment, if new ones are initiated just 71 // at any given moment, if new ones are initiated just
68 // ignore them until we are done with the old one. 72 // ignore them until we are done with the old one.
69 if (profile_creation_type_ != NO_CREATION_IN_PROGRESS) 73 if (profile_creation_type_ != NO_CREATION_IN_PROGRESS)
70 return; 74 return;
71 75
72 profile_creation_type_ = NON_SUPERVISED_PROFILE_CREATION; 76 profile_creation_type_ = NON_SUPERVISED_PROFILE_CREATION;
73 77
74 DCHECK(profile_path_being_created_.empty()); 78 DCHECK(profile_path_being_created_.empty());
75 profile_creation_start_time_ = base::TimeTicks::Now(); 79 profile_creation_start_time_ = base::TimeTicks::Now();
76 80
77 base::string16 name; 81 base::string16 name;
78 base::string16 icon; 82 base::string16 icon;
83 bool create_shortcut = false;
84 // If supervised users aren't enabled, an empty user ID is fine.
79 std::string supervised_user_id; 85 std::string supervised_user_id;
80 bool create_shortcut = false; 86
87 if (args->GetString(0, &name) && args->GetString(1, &icon)) {
88 args->GetBoolean(2, &create_shortcut);
89 }
90
91 #if defined(ENABLE_MANAGED_USERS)
81 bool supervised_user = false; 92 bool supervised_user = false;
82 if (args->GetString(0, &name) && args->GetString(1, &icon)) { 93
83 if (args->GetBoolean(2, &create_shortcut)) { 94 if (args->GetSize() == 4) {
84 bool success = args->GetBoolean(3, &supervised_user); 95 bool success = args->GetBoolean(3, &supervised_user);
85 DCHECK(success); 96 DCHECK(success);
97
86 success = args->GetString(4, &supervised_user_id); 98 success = args->GetString(4, &supervised_user_id);
87 DCHECK(success); 99 DCHECK(success);
88 }
89 } 100 }
90 101
91 if (supervised_user) { 102 if (supervised_user) {
92 if (!IsValidExistingSupervisedUserId(supervised_user_id)) 103 if (!IsValidExistingSupervisedUserId(supervised_user_id))
93 return; 104 return;
94 105
95 profile_creation_type_ = SUPERVISED_PROFILE_IMPORT; 106 profile_creation_type_ = SUPERVISED_PROFILE_IMPORT;
96 if (supervised_user_id.empty()) { 107 if (supervised_user_id.empty()) {
97 profile_creation_type_ = SUPERVISED_PROFILE_CREATION; 108 profile_creation_type_ = SUPERVISED_PROFILE_CREATION;
98 supervised_user_id = 109 supervised_user_id =
99 SupervisedUserRegistrationUtility::GenerateNewSupervisedUserId(); 110 SupervisedUserRegistrationUtility::GenerateNewSupervisedUserId();
100 111
101 // If sync is not yet fully initialized, the creation may take extra time, 112 // If sync is not yet fully initialized, the creation may take extra time,
102 // so show a message. Import doesn't wait for an acknowledgement, so it 113 // so show a message. Import doesn't wait for an acknowledgment, so it
103 // won't have the same potential delay. 114 // won't have the same potential delay.
104 ProfileSyncService* sync_service = 115 ProfileSyncService* sync_service =
105 ProfileSyncServiceFactory::GetInstance()->GetForProfile( 116 ProfileSyncServiceFactory::GetInstance()->GetForProfile(
106 current_profile); 117 Profile::FromWebUI(web_ui()));
107 ProfileSyncService::SyncStatusSummary status = 118 ProfileSyncService::SyncStatusSummary status =
108 sync_service->QuerySyncStatusSummary(); 119 sync_service->QuerySyncStatusSummary();
109 if (status == ProfileSyncService::DATATYPES_NOT_INITIALIZED) { 120 if (status == ProfileSyncService::DATATYPES_NOT_INITIALIZED) {
110 ShowProfileCreationWarning(l10n_util::GetStringUTF16( 121 ShowProfileCreationWarning(l10n_util::GetStringUTF16(
111 IDS_PROFILES_CREATE_SUPERVISED_JUST_SIGNED_IN)); 122 IDS_PROFILES_CREATE_SUPERVISED_JUST_SIGNED_IN));
112 } 123 }
113 } 124 }
114 } 125 }
126 #endif
115 127
116 ProfileMetrics::LogProfileAddNewUser(ProfileMetrics::ADD_NEW_USER_DIALOG); 128 ProfileMetrics::LogProfileAddNewUser(ProfileMetrics::ADD_NEW_USER_DIALOG);
117 129
118 profile_path_being_created_ = ProfileManager::CreateMultiProfileAsync( 130 profile_path_being_created_ = ProfileManager::CreateMultiProfileAsync(
119 name, icon, 131 name, icon,
120 base::Bind(&CreateProfileHandler::OnProfileCreated, 132 base::Bind(&CreateProfileHandler::OnProfileCreated,
121 weak_ptr_factory_.GetWeakPtr(), 133 weak_ptr_factory_.GetWeakPtr(),
122 create_shortcut, 134 create_shortcut,
123 helper::GetDesktopType(web_ui()), 135 helper::GetDesktopType(web_ui()),
124 supervised_user_id), 136 supervised_user_id),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 bool create_shortcut, 178 bool create_shortcut,
167 chrome::HostDesktopType desktop_type, 179 chrome::HostDesktopType desktop_type,
168 const std::string& supervised_user_id, 180 const std::string& supervised_user_id,
169 Profile* profile) { 181 Profile* profile) {
170 switch (profile_creation_type_) { 182 switch (profile_creation_type_) {
171 case NON_SUPERVISED_PROFILE_CREATION: { 183 case NON_SUPERVISED_PROFILE_CREATION: {
172 DCHECK(supervised_user_id.empty()); 184 DCHECK(supervised_user_id.empty());
173 CreateShortcutAndShowSuccess(create_shortcut, desktop_type, profile); 185 CreateShortcutAndShowSuccess(create_shortcut, desktop_type, profile);
174 break; 186 break;
175 } 187 }
188 #if defined(ENABLE_MANAGED_USERS)
176 case SUPERVISED_PROFILE_CREATION: 189 case SUPERVISED_PROFILE_CREATION:
177 case SUPERVISED_PROFILE_IMPORT: 190 case SUPERVISED_PROFILE_IMPORT:
178 RegisterSupervisedUser(create_shortcut, desktop_type, 191 RegisterSupervisedUser(create_shortcut, desktop_type,
179 supervised_user_id, profile); 192 supervised_user_id, profile);
180 break; 193 break;
194 #endif
181 case NO_CREATION_IN_PROGRESS: 195 case NO_CREATION_IN_PROGRESS:
196 default:
Bernhard Bauer 2014/07/14 16:39:05 Is this actually necessary? If ENABLE_MANAGED_USER
mckev 2014/07/14 23:50:03 Yep, you're right. I added that opportunistically
182 NOTREACHED(); 197 NOTREACHED();
183 break; 198 break;
184 } 199 }
185 } 200 }
186 201
187 void CreateProfileHandler::RegisterSupervisedUser(
188 bool create_shortcut,
189 chrome::HostDesktopType desktop_type,
190 const std::string& supervised_user_id,
191 Profile* new_profile) {
192 DCHECK_EQ(profile_path_being_created_.value(),
193 new_profile->GetPath().value());
194
195 SupervisedUserService* supervised_user_service =
196 SupervisedUserServiceFactory::GetForProfile(new_profile);
197
198 // Register the supervised user using the profile of the custodian.
199 supervised_user_registration_utility_ =
200 SupervisedUserRegistrationUtility::Create(Profile::FromWebUI(web_ui()));
201 supervised_user_service->RegisterAndInitSync(
202 supervised_user_registration_utility_.get(),
203 Profile::FromWebUI(web_ui()),
204 supervised_user_id,
205 base::Bind(&CreateProfileHandler::OnSupervisedUserRegistered,
206 weak_ptr_factory_.GetWeakPtr(),
207 create_shortcut,
208 desktop_type,
209 new_profile));
210 }
211
212 void CreateProfileHandler::OnSupervisedUserRegistered(
213 bool create_shortcut,
214 chrome::HostDesktopType desktop_type,
215 Profile* profile,
216 const GoogleServiceAuthError& error) {
217 GoogleServiceAuthError::State state = error.state();
218 RecordSupervisedProfileCreationMetrics(state);
219 if (state == GoogleServiceAuthError::NONE) {
220 CreateShortcutAndShowSuccess(create_shortcut, desktop_type, profile);
221 return;
222 }
223
224 base::string16 error_msg;
225 if (state == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS ||
226 state == GoogleServiceAuthError::USER_NOT_SIGNED_UP ||
227 state == GoogleServiceAuthError::ACCOUNT_DELETED ||
228 state == GoogleServiceAuthError::ACCOUNT_DISABLED) {
229 error_msg = GetProfileCreationErrorMessage(SIGNIN_ERROR);
230 } else {
231 error_msg = GetProfileCreationErrorMessage(REMOTE_ERROR);
232 }
233 ShowProfileCreationError(profile, error_msg);
234 }
235
236 void CreateProfileHandler::CreateShortcutAndShowSuccess( 202 void CreateProfileHandler::CreateShortcutAndShowSuccess(
237 bool create_shortcut, 203 bool create_shortcut,
238 chrome::HostDesktopType desktop_type, 204 chrome::HostDesktopType desktop_type,
239 Profile* profile) { 205 Profile* profile) {
240 if (create_shortcut) { 206 if (create_shortcut) {
241 ProfileShortcutManager* shortcut_manager = 207 ProfileShortcutManager* shortcut_manager =
242 g_browser_process->profile_manager()->profile_shortcut_manager(); 208 g_browser_process->profile_manager()->profile_shortcut_manager();
243 209
244 if (shortcut_manager) 210 if (shortcut_manager)
245 shortcut_manager->CreateProfileShortcut(profile->GetPath()); 211 shortcut_manager->CreateProfileShortcut(profile->GetPath());
246 } 212 }
247 213
248 DCHECK_EQ(profile_path_being_created_.value(), profile->GetPath().value()); 214 DCHECK_EQ(profile_path_being_created_.value(), profile->GetPath().value());
249 profile_path_being_created_.clear(); 215 profile_path_being_created_.clear();
250 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_); 216 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_);
251 base::DictionaryValue dict; 217 base::DictionaryValue dict;
252 dict.SetString("name", 218 dict.SetString("name",
253 profile->GetPrefs()->GetString(prefs::kProfileName)); 219 profile->GetPrefs()->GetString(prefs::kProfileName));
254 dict.Set("filePath", base::CreateFilePathValue(profile->GetPath())); 220 dict.Set("filePath", base::CreateFilePathValue(profile->GetPath()));
221 #if defined(ENABLE_MANAGED_USERS)
255 bool is_supervised = 222 bool is_supervised =
256 profile_creation_type_ == SUPERVISED_PROFILE_CREATION || 223 profile_creation_type_ == SUPERVISED_PROFILE_CREATION ||
257 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT; 224 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT;
258 dict.SetBoolean("isManaged", is_supervised); 225 dict.SetBoolean("isManaged", is_supervised);
226 #endif
259 web_ui()->CallJavascriptFunction( 227 web_ui()->CallJavascriptFunction(
260 GetJavascriptMethodName(PROFILE_CREATION_SUCCESS), dict); 228 GetJavascriptMethodName(PROFILE_CREATION_SUCCESS), dict);
261 229
262 // If the new profile is a supervised user, instead of opening a new window 230 // If the new profile is a supervised user, instead of opening a new window
263 // right away, a confirmation overlay will be shown by JS from the creation 231 // right away, a confirmation overlay will be shown by JS from the creation
264 // dialog. If we are importing an existing supervised profile or creating a 232 // dialog. If we are importing an existing supervised profile or creating a
265 // new non-supervised user profile we don't show any confirmation, so open 233 // new non-supervised user profile we don't show any confirmation, so open
266 // the new window now. 234 // the new window now.
267 if (profile_creation_type_ != SUPERVISED_PROFILE_CREATION) { 235 if (profile_creation_type_ == NON_SUPERVISED_PROFILE_CREATION) {
Bernhard Bauer 2014/07/14 16:39:06 This doesn't quite match the old behavior for impo
mckev 2014/07/14 23:50:03 Indeed. My apologies for missing that.
268 // Opening the new window must be the last action, after all callbacks 236 // Opening the new window must be the last action, after all callbacks
269 // have been run, to give them a chance to initialize the profile. 237 // have been run, to give them a chance to initialize the profile.
270 helper::OpenNewWindowForProfile(desktop_type, 238 helper::OpenNewWindowForProfile(desktop_type,
271 profile, 239 profile,
272 Profile::CREATE_STATUS_INITIALIZED); 240 Profile::CREATE_STATUS_INITIALIZED);
273 } 241 }
274 profile_creation_type_ = NO_CREATION_IN_PROGRESS; 242 profile_creation_type_ = NO_CREATION_IN_PROGRESS;
275 } 243 }
276 244
277 void CreateProfileHandler::ShowProfileCreationError( 245 void CreateProfileHandler::ShowProfileCreationError(
278 Profile* profile, 246 Profile* profile,
279 const base::string16& error) { 247 const base::string16& error) {
280 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_); 248 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_);
281 profile_creation_type_ = NO_CREATION_IN_PROGRESS; 249 profile_creation_type_ = NO_CREATION_IN_PROGRESS;
282 profile_path_being_created_.clear(); 250 profile_path_being_created_.clear();
283 web_ui()->CallJavascriptFunction( 251 web_ui()->CallJavascriptFunction(
284 GetJavascriptMethodName(PROFILE_CREATION_ERROR), 252 GetJavascriptMethodName(PROFILE_CREATION_ERROR),
285 base::StringValue(error)); 253 base::StringValue(error));
286 helper::DeleteProfileAtPath(profile->GetPath(), web_ui()); 254 helper::DeleteProfileAtPath(profile->GetPath(), web_ui());
287 } 255 }
288 256
289 void CreateProfileHandler::ShowProfileCreationWarning(
290 const base::string16& warning) {
291 DCHECK_EQ(SUPERVISED_PROFILE_CREATION, profile_creation_type_);
292 web_ui()->CallJavascriptFunction("BrowserOptions.showCreateProfileWarning",
293 base::StringValue(warning));
294 }
295
296 void CreateProfileHandler::HandleCancelProfileCreation( 257 void CreateProfileHandler::HandleCancelProfileCreation(
297 const base::ListValue* args) { 258 const base::ListValue* args) {
298 CancelProfileRegistration(true); 259 CancelProfileRegistration(true);
299 } 260 }
300 261
301 void CreateProfileHandler::CancelProfileRegistration(bool user_initiated) { 262 void CreateProfileHandler::CancelProfileRegistration(bool user_initiated) {
302 if (profile_path_being_created_.empty()) 263 if (profile_path_being_created_.empty())
303 return; 264 return;
304 265
305 ProfileManager* manager = g_browser_process->profile_manager(); 266 ProfileManager* manager = g_browser_process->profile_manager();
306 Profile* new_profile = manager->GetProfileByPath(profile_path_being_created_); 267 Profile* new_profile = manager->GetProfileByPath(profile_path_being_created_);
307 if (!new_profile) 268 if (!new_profile)
308 return; 269 return;
309 270
271 #if defined(ENABLE_MANAGED_USERS)
310 // Non-supervised user creation cannot be canceled. (Creating a non-supervised 272 // Non-supervised user creation cannot be canceled. (Creating a non-supervised
311 // profile shouldn't take significant time, and it can easily be deleted 273 // profile shouldn't take significant time, and it can easily be deleted
312 // afterward.) 274 // afterward.)
313 if (!new_profile->IsSupervised()) 275 if (!new_profile->IsSupervised())
Bernhard Bauer 2014/07/14 16:39:06 This is also a slight change from the old behavior
mckev 2014/07/14 23:50:03 Agreed. I added an early return at the beginning
Bernhard Bauer 2014/07/16 09:54:00 Would it make sense to put the whole method body i
314 return; 276 return;
315 277
278 DCHECK(supervised_user_registration_utility_.get());
279 supervised_user_registration_utility_.reset();
280 #endif
281
316 if (user_initiated) { 282 if (user_initiated) {
317 UMA_HISTOGRAM_MEDIUM_TIMES( 283 UMA_HISTOGRAM_MEDIUM_TIMES(
318 "Profile.CreateTimeCanceledNoTimeout", 284 "Profile.CreateTimeCanceledNoTimeout",
319 base::TimeTicks::Now() - profile_creation_start_time_); 285 base::TimeTicks::Now() - profile_creation_start_time_);
320 RecordProfileCreationMetrics(Profile::CREATE_STATUS_CANCELED); 286 RecordProfileCreationMetrics(Profile::CREATE_STATUS_CANCELED);
321 } 287 }
322 288
323 DCHECK(supervised_user_registration_utility_.get());
324 supervised_user_registration_utility_.reset();
325
326 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_); 289 DCHECK_NE(NO_CREATION_IN_PROGRESS, profile_creation_type_);
327 profile_creation_type_ = NO_CREATION_IN_PROGRESS; 290 profile_creation_type_ = NO_CREATION_IN_PROGRESS;
328 291
329 // Cancelling registration means the callback passed into 292 // Cancelling registration means the callback passed into
330 // RegisterAndInitSync() won't be called, so the cleanup must be done here. 293 // RegisterAndInitSync() won't be called, so the cleanup must be done here.
331 profile_path_being_created_.clear(); 294 profile_path_being_created_.clear();
332 helper::DeleteProfileAtPath(new_profile->GetPath(), web_ui()); 295 helper::DeleteProfileAtPath(new_profile->GetPath(), web_ui());
333 } 296 }
334 297
335 void CreateProfileHandler::RecordProfileCreationMetrics( 298 void CreateProfileHandler::RecordProfileCreationMetrics(
336 Profile::CreateStatus status) { 299 Profile::CreateStatus status) {
337 UMA_HISTOGRAM_ENUMERATION("Profile.CreateResult", 300 UMA_HISTOGRAM_ENUMERATION("Profile.CreateResult",
338 status, 301 status,
339 Profile::MAX_CREATE_STATUS); 302 Profile::MAX_CREATE_STATUS);
340 UMA_HISTOGRAM_MEDIUM_TIMES( 303 UMA_HISTOGRAM_MEDIUM_TIMES(
341 "Profile.CreateTimeNoTimeout", 304 "Profile.CreateTimeNoTimeout",
342 base::TimeTicks::Now() - profile_creation_start_time_); 305 base::TimeTicks::Now() - profile_creation_start_time_);
343 } 306 }
344 307
308 base::string16 CreateProfileHandler::GetProfileCreationErrorMessage(
Bernhard Bauer 2014/07/14 16:39:06 This whole method is only called for supervised us
mckev 2014/07/14 23:50:03 It looks there is one exception - it's also called
Bernhard Bauer 2014/07/16 09:54:00 Hmm, looking at it in more detail, each of the err
309 ProfileCreationErrorType error) const {
310 int message_id = -1;
311 switch (profile_creation_type_) {
312 #if defined(ENABLE_MANAGED_USERS)
313 case SUPERVISED_PROFILE_IMPORT:
314 switch (error) {
315 case SIGNIN_ERROR:
316 message_id = IDS_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR;
317 break;
318 case REMOTE_ERROR:
319 message_id = IDS_SUPERVISED_USER_IMPORT_REMOTE_ERROR;
320 break;
321 case LOCAL_ERROR:
322 message_id = IDS_SUPERVISED_USER_IMPORT_LOCAL_ERROR;
323 break;
324 default:
325 NOTREACHED();
326 }
327 break;
328 #endif
329 default:
330 switch (error) {
331 case SIGNIN_ERROR:
332 message_id = IDS_PROFILES_CREATE_SIGN_IN_ERROR;
333 break;
334 case REMOTE_ERROR:
335 message_id = IDS_PROFILES_CREATE_REMOTE_ERROR;
336 break;
337 case LOCAL_ERROR:
338 message_id = IDS_PROFILES_CREATE_LOCAL_ERROR;
339 break;
340 default:
341 NOTREACHED();
342 }
343 }
344
345 return l10n_util::GetStringUTF16(message_id);
346 }
347
348 std::string CreateProfileHandler::GetJavascriptMethodName(
349 ProfileCreationStatus status) const {
350 switch (profile_creation_type_) {
351 #if defined(ENABLE_MANAGED_USERS)
352 case SUPERVISED_PROFILE_IMPORT:
353 switch (status) {
354 case PROFILE_CREATION_SUCCESS:
355 return "BrowserOptions.showManagedUserImportSuccess";
356 case PROFILE_CREATION_ERROR:
357 return "BrowserOptions.showManagedUserImportError";
358 }
359 break;
360 #endif
361 default:
362 switch (status) {
363 case PROFILE_CREATION_SUCCESS:
364 return "BrowserOptions.showCreateProfileSuccess";
365 case PROFILE_CREATION_ERROR:
366 return "BrowserOptions.showCreateProfileError";
367 }
368 break;
369 }
370
371 NOTREACHED();
372 return std::string();
373 }
374
375 #if defined(ENABLE_MANAGED_USERS)
376 void CreateProfileHandler::RegisterSupervisedUser(
377 bool create_shortcut,
378 chrome::HostDesktopType desktop_type,
379 const std::string& supervised_user_id,
380 Profile* new_profile) {
381 DCHECK_EQ(profile_path_being_created_.value(),
382 new_profile->GetPath().value());
383
384 SupervisedUserService* supervised_user_service =
385 SupervisedUserServiceFactory::GetForProfile(new_profile);
386
387 // Register the supervised user using the profile of the custodian.
388 supervised_user_registration_utility_ =
389 SupervisedUserRegistrationUtility::Create(Profile::FromWebUI(web_ui()));
390 supervised_user_service->RegisterAndInitSync(
391 supervised_user_registration_utility_.get(),
392 Profile::FromWebUI(web_ui()),
393 supervised_user_id,
394 base::Bind(&CreateProfileHandler::OnSupervisedUserRegistered,
395 weak_ptr_factory_.GetWeakPtr(),
396 create_shortcut,
397 desktop_type,
398 new_profile));
399 }
400
401 void CreateProfileHandler::OnSupervisedUserRegistered(
402 bool create_shortcut,
403 chrome::HostDesktopType desktop_type,
404 Profile* profile,
405 const GoogleServiceAuthError& error) {
406 GoogleServiceAuthError::State state = error.state();
407 RecordSupervisedProfileCreationMetrics(state);
408 if (state == GoogleServiceAuthError::NONE) {
409 CreateShortcutAndShowSuccess(create_shortcut, desktop_type, profile);
410 return;
411 }
412
413 base::string16 error_msg;
414 if (state == GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS ||
415 state == GoogleServiceAuthError::USER_NOT_SIGNED_UP ||
416 state == GoogleServiceAuthError::ACCOUNT_DELETED ||
417 state == GoogleServiceAuthError::ACCOUNT_DISABLED) {
418 error_msg = GetProfileCreationErrorMessage(SIGNIN_ERROR);
419 } else {
420 error_msg = GetProfileCreationErrorMessage(REMOTE_ERROR);
421 }
422 ShowProfileCreationError(profile, error_msg);
423 }
424
425 void CreateProfileHandler::ShowProfileCreationWarning(
426 const base::string16& warning) {
427 DCHECK_EQ(SUPERVISED_PROFILE_CREATION, profile_creation_type_);
428 web_ui()->CallJavascriptFunction("BrowserOptions.showCreateProfileWarning",
429 base::StringValue(warning));
430 }
431
345 void CreateProfileHandler::RecordSupervisedProfileCreationMetrics( 432 void CreateProfileHandler::RecordSupervisedProfileCreationMetrics(
346 GoogleServiceAuthError::State error_state) { 433 GoogleServiceAuthError::State error_state) {
347 if (profile_creation_type_ == SUPERVISED_PROFILE_CREATION) { 434 if (profile_creation_type_ == SUPERVISED_PROFILE_CREATION) {
348 UMA_HISTOGRAM_ENUMERATION("Profile.SupervisedProfileCreateError", 435 UMA_HISTOGRAM_ENUMERATION("Profile.SupervisedProfileCreateError",
349 error_state, 436 error_state,
350 GoogleServiceAuthError::NUM_STATES); 437 GoogleServiceAuthError::NUM_STATES);
351 UMA_HISTOGRAM_MEDIUM_TIMES( 438 UMA_HISTOGRAM_MEDIUM_TIMES(
352 "Profile.SupervisedProfileTotalCreateTime", 439 "Profile.SupervisedProfileTotalCreateTime",
353 base::TimeTicks::Now() - profile_creation_start_time_); 440 base::TimeTicks::Now() - profile_creation_start_time_);
354 } else { 441 } else {
355 DCHECK_EQ(SUPERVISED_PROFILE_IMPORT, profile_creation_type_); 442 DCHECK_EQ(SUPERVISED_PROFILE_IMPORT, profile_creation_type_);
356 UMA_HISTOGRAM_ENUMERATION("Profile.SupervisedProfileImportError", 443 UMA_HISTOGRAM_ENUMERATION("Profile.SupervisedProfileImportError",
357 error_state, 444 error_state,
358 GoogleServiceAuthError::NUM_STATES); 445 GoogleServiceAuthError::NUM_STATES);
359 UMA_HISTOGRAM_MEDIUM_TIMES( 446 UMA_HISTOGRAM_MEDIUM_TIMES(
360 "Profile.SupervisedProfileTotalImportTime", 447 "Profile.SupervisedProfileTotalImportTime",
361 base::TimeTicks::Now() - profile_creation_start_time_); 448 base::TimeTicks::Now() - profile_creation_start_time_);
362 } 449 }
363 } 450 }
364 451
365 base::string16 CreateProfileHandler::GetProfileCreationErrorMessage(
366 ProfileCreationErrorType error) const {
367 int message_id = -1;
368 switch (error) {
369 case SIGNIN_ERROR:
370 message_id =
371 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ?
372 IDS_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR :
373 IDS_PROFILES_CREATE_SIGN_IN_ERROR;
374 break;
375 case REMOTE_ERROR:
376 message_id =
377 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ?
378 IDS_SUPERVISED_USER_IMPORT_REMOTE_ERROR :
379 IDS_PROFILES_CREATE_REMOTE_ERROR;
380 break;
381 case LOCAL_ERROR:
382 message_id =
383 profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ?
384 IDS_SUPERVISED_USER_IMPORT_LOCAL_ERROR :
385 IDS_PROFILES_CREATE_LOCAL_ERROR;
386 break;
387 }
388
389 return l10n_util::GetStringUTF16(message_id);
390 }
391
392 std::string CreateProfileHandler::GetJavascriptMethodName(
393 ProfileCreationStatus status) const {
394 switch (status) {
395 case PROFILE_CREATION_SUCCESS:
396 return profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ?
397 "BrowserOptions.showManagedUserImportSuccess" :
398 "BrowserOptions.showCreateProfileSuccess";
399 case PROFILE_CREATION_ERROR:
400 return profile_creation_type_ == SUPERVISED_PROFILE_IMPORT ?
401 "BrowserOptions.showManagedUserImportError" :
402 "BrowserOptions.showCreateProfileError";
403 }
404
405 NOTREACHED();
406 return std::string();
407 }
408
409 bool CreateProfileHandler::IsValidExistingSupervisedUserId( 452 bool CreateProfileHandler::IsValidExistingSupervisedUserId(
410 const std::string& existing_supervised_user_id) const { 453 const std::string& existing_supervised_user_id) const {
411 if (existing_supervised_user_id.empty()) 454 if (existing_supervised_user_id.empty())
412 return true; 455 return true;
413 456
414 Profile* profile = Profile::FromWebUI(web_ui()); 457 Profile* profile = Profile::FromWebUI(web_ui());
415 const base::DictionaryValue* dict = 458 const base::DictionaryValue* dict =
416 SupervisedUserSyncServiceFactory::GetForProfile(profile)-> 459 SupervisedUserSyncServiceFactory::GetForProfile(profile)->
417 GetSupervisedUsers(); 460 GetSupervisedUsers();
418 if (!dict->HasKey(existing_supervised_user_id)) 461 if (!dict->HasKey(existing_supervised_user_id))
419 return false; 462 return false;
420 463
421 // Check if this supervised user already exists on this machine. 464 // Check if this supervised user already exists on this machine.
422 const ProfileInfoCache& cache = 465 const ProfileInfoCache& cache =
423 g_browser_process->profile_manager()->GetProfileInfoCache(); 466 g_browser_process->profile_manager()->GetProfileInfoCache();
424 for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) { 467 for (size_t i = 0; i < cache.GetNumberOfProfiles(); ++i) {
425 if (existing_supervised_user_id == 468 if (existing_supervised_user_id ==
426 cache.GetSupervisedUserIdOfProfileAtIndex(i)) 469 cache.GetSupervisedUserIdOfProfileAtIndex(i))
427 return false; 470 return false;
428 } 471 }
429 return true; 472 return true;
430 } 473 }
474 #endif
431 475
432 } // namespace options 476 } // namespace options
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698