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

Side by Side Diff: chrome/browser/chromeos/login/login_performer.cc

Issue 7867044: PART1: Initiated the SignedSettings refactoring. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clean up some debug output. Created 9 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/chromeos/login/login_performer.h" 5 #include "chrome/browser/chromeos/login/login_performer.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h"
9 #include "base/command_line.h" 10 #include "base/command_line.h"
10 #include "base/logging.h" 11 #include "base/logging.h"
11 #include "base/message_loop.h" 12 #include "base/message_loop.h"
12 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
13 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
14 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
15 #include "chrome/browser/chromeos/boot_times_loader.h" 16 #include "chrome/browser/chromeos/boot_times_loader.h"
16 #include "chrome/browser/chromeos/cros/cros_library.h" 17 #include "chrome/browser/chromeos/cros/cros_library.h"
18 #include "chrome/browser/chromeos/cros_settings.h"
Denis Lagno 2011/09/20 14:05:22 nit: / precedes _ in ASCII order.
pastarmovj 2011/09/20 17:11:52 Done.
17 #include "chrome/browser/chromeos/cros/screen_lock_library.h" 19 #include "chrome/browser/chromeos/cros/screen_lock_library.h"
18 #include "chrome/browser/chromeos/cros_settings_names.h" 20 #include "chrome/browser/chromeos/cros_settings_names.h"
19 #include "chrome/browser/chromeos/login/login_utils.h" 21 #include "chrome/browser/chromeos/login/login_utils.h"
20 #include "chrome/browser/chromeos/login/screen_locker.h" 22 #include "chrome/browser/chromeos/login/screen_locker.h"
21 #include "chrome/browser/chromeos/user_cros_settings_provider.h"
22 #include "chrome/browser/prefs/pref_service.h" 23 #include "chrome/browser/prefs/pref_service.h"
23 #include "chrome/browser/profiles/profile.h" 24 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/browser/profiles/profile_manager.h" 25 #include "chrome/browser/profiles/profile_manager.h"
25 #include "chrome/common/chrome_notification_types.h" 26 #include "chrome/common/chrome_notification_types.h"
26 #include "chrome/common/chrome_switches.h" 27 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/pref_names.h" 28 #include "chrome/common/pref_names.h"
28 #include "content/browser/browser_thread.h" 29 #include "content/browser/browser_thread.h"
29 #include "content/browser/user_metrics.h" 30 #include "content/browser/user_metrics.h"
30 #include "content/common/content_notification_types.h" 31 #include "content/common/content_notification_types.h"
31 #include "content/common/notification_service.h" 32 #include "content/common/notification_service.h"
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 last_login_failure_ = 220 last_login_failure_ =
220 LoginFailure::FromNetworkAuthFailure(GoogleServiceAuthError( 221 LoginFailure::FromNetworkAuthFailure(GoogleServiceAuthError(
221 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); 222 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS));
222 password_changed_ = true; 223 password_changed_ = true;
223 DVLOG(1) << "Password change detected - locking screen."; 224 DVLOG(1) << "Password change detected - locking screen.";
224 RequestScreenLock(); 225 RequestScreenLock();
225 } 226 }
226 } 227 }
227 228
228 //////////////////////////////////////////////////////////////////////////////// 229 ////////////////////////////////////////////////////////////////////////////////
229 // LoginPerformer, SignedSettingsHelper::Callback implementation:
230
231 void LoginPerformer::OnCheckWhitelistCompleted(SignedSettings::ReturnCode code,
232 const std::string& email) {
233 if (code == SignedSettings::SUCCESS) {
234 // Whitelist check passed, continue with authentication.
235 if (auth_mode_ == AUTH_MODE_EXTENSION) {
236 StartLoginCompletion();
237 } else {
238 StartAuthentication();
239 }
240 } else {
241 if (delegate_)
242 delegate_->WhiteListCheckFailed(email);
243 else
244 NOTREACHED();
245 }
246 }
247
248 ////////////////////////////////////////////////////////////////////////////////
249 // LoginPerformer, NotificationObserver implementation: 230 // LoginPerformer, NotificationObserver implementation:
250 // 231 //
251 232
252 void LoginPerformer::Observe(int type, 233 void LoginPerformer::Observe(int type,
253 const NotificationSource& source, 234 const NotificationSource& source,
254 const NotificationDetails& details) { 235 const NotificationDetails& details) {
255 if (type != chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED) 236 if (type != chrome::NOTIFICATION_SCREEN_LOCK_STATE_CHANGED)
256 return; 237 return;
257 238
258 bool is_screen_locked = *Details<bool>(details).ptr(); 239 bool is_screen_locked = *Details<bool>(details).ptr();
259 if (is_screen_locked) { 240 if (is_screen_locked) {
260 if (screen_lock_requested_) { 241 if (screen_lock_requested_) {
261 screen_lock_requested_ = false; 242 screen_lock_requested_ = false;
262 ResolveScreenLocked(); 243 ResolveScreenLocked();
263 } 244 }
264 } else { 245 } else {
265 ResolveScreenUnlocked(); 246 ResolveScreenUnlocked();
266 } 247 }
267 } 248 }
268 249
269 //////////////////////////////////////////////////////////////////////////////// 250 ////////////////////////////////////////////////////////////////////////////////
270 // LoginPerformer, public: 251 // LoginPerformer, public:
271 void LoginPerformer::CompleteLogin(const std::string& username, 252 void LoginPerformer::CompleteLogin(const std::string& username,
272 const std::string& password) { 253 const std::string& password) {
273 auth_mode_ = AUTH_MODE_EXTENSION; 254 auth_mode_ = AUTH_MODE_EXTENSION;
274 username_ = username; 255 username_ = username;
275 password_ = password; 256 password_ = password;
257
258 CrosSettings* cros_settings = CrosSettings::Get();
259
276 // Whitelist check is always performed during initial login and 260 // Whitelist check is always performed during initial login and
277 // should not be performed when ScreenLock is active (pending online auth). 261 // should not be performed when ScreenLock is active (pending online auth).
278 if (!ScreenLocker::default_screen_locker()) { 262 if (!ScreenLocker::default_screen_locker()) {
279 // Must not proceed without signature verification. 263 // Must not proceed without signature verification or valid user list.
280 UserCrosSettingsProvider user_settings; 264 bool trusted_settings_available =
281 bool trusted_setting_available = user_settings.RequestTrustedAllowNewUser( 265 cros_settings->GetTrusted(
282 method_factory_.NewRunnableMethod(&LoginPerformer::CompleteLogin, 266 kAccountsPrefAllowNewUser,
283 username, 267 base::Bind(&LoginPerformer::CompleteLogin, base::Unretained(this),
pastarmovj 2011/09/20 17:11:52 Fixed those too.
284 password)); 268 username, password)) ||
285 if (!trusted_setting_available) { 269 cros_settings->GetTrusted(
270 kAccountsPrefAllowNewUser,
271 base::Bind(&LoginPerformer::CompleteLogin, base::Unretained(this),
272 username, password));
273 if (!trusted_settings_available) {
286 // Value of AllowNewUser setting is still not verified. 274 // Value of AllowNewUser setting is still not verified.
287 // Another attempt will be invoked after verification completion. 275 // Another attempt will be invoked after verification completion.
288 return; 276 return;
289 } 277 }
290 } 278 }
291 279
292 if (ScreenLocker::default_screen_locker() || 280 bool allow_new_user = false;
293 UserCrosSettingsProvider::cached_allow_new_user()) { 281 cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user);
282 if (ScreenLocker::default_screen_locker() || allow_new_user) {
294 // Starts authentication if guest login is allowed or online auth pending. 283 // Starts authentication if guest login is allowed or online auth pending.
295 StartLoginCompletion(); 284 StartLoginCompletion();
296 } else { 285 } else {
297 // Otherwise, do whitelist check first. 286 const ListValue *user_list;
298 PrefService* local_state = g_browser_process->local_state(); 287 if (cros_settings->GetList(kAccountsPrefUsers, &user_list) &&
299 CHECK(local_state); 288 user_list->Find(StringValue(username)) != user_list->end()) {
300 if (local_state->IsManagedPreference(kAccountsPrefUsers)) { 289 StartLoginCompletion();
301 if (UserCrosSettingsProvider::IsEmailInCachedWhitelist(username)) {
302 StartLoginCompletion();
303 } else {
304 if (delegate_)
305 delegate_->WhiteListCheckFailed(username);
306 else
307 NOTREACHED();
308 }
309 } else { 290 } else {
310 // In case of signed settings: with current implementation we do not 291 if (delegate_)
311 // trust whitelist returned by PrefService. So make separate check. 292 delegate_->WhiteListCheckFailed(username);
312 SignedSettingsHelper::Get()->StartCheckWhitelistOp( 293 else
313 username, this); 294 NOTREACHED();
314 } 295 }
315 } 296 }
316 } 297 }
317 298
318 void LoginPerformer::Login(const std::string& username, 299 void LoginPerformer::Login(const std::string& username,
319 const std::string& password) { 300 const std::string& password) {
320 auth_mode_ = AUTH_MODE_INTERNAL; 301 auth_mode_ = AUTH_MODE_INTERNAL;
321 username_ = username; 302 username_ = username;
322 password_ = password; 303 password_ = password;
323 304
305 CrosSettings* cros_settings = CrosSettings::Get();
306
324 // Whitelist check is always performed during initial login and 307 // Whitelist check is always performed during initial login and
325 // should not be performed when ScreenLock is active (pending online auth). 308 // should not be performed when ScreenLock is active (pending online auth).
326 if (!ScreenLocker::default_screen_locker()) { 309 if (!ScreenLocker::default_screen_locker()) {
327 // Must not proceed without signature verification. 310 // Must not proceed without signature verification.
328 UserCrosSettingsProvider user_settings; 311 bool trusted_settings_available =
329 bool trusted_setting_available = user_settings.RequestTrustedAllowNewUser( 312 cros_settings->GetTrusted(
330 method_factory_.NewRunnableMethod(&LoginPerformer::Login, 313 kAccountsPrefAllowNewUser,
331 username, 314 base::Bind(&LoginPerformer::CompleteLogin, base::Unretained(this),
332 password)); 315 username, password)) ||
333 if (!trusted_setting_available) { 316 cros_settings->GetTrusted(
317 kAccountsPrefAllowNewUser,
318 base::Bind(&LoginPerformer::CompleteLogin, base::Unretained(this),
319 username, password));
320 if (!trusted_settings_available) {
334 // Value of AllowNewUser setting is still not verified. 321 // Value of AllowNewUser setting is still not verified.
335 // Another attempt will be invoked after verification completion. 322 // Another attempt will be invoked after verification completion.
336 return; 323 return;
337 } 324 }
338 } 325 }
339 326
340 if (ScreenLocker::default_screen_locker() || 327 bool allow_new_user = false;
341 UserCrosSettingsProvider::cached_allow_new_user()) { 328 cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user);
329 if (ScreenLocker::default_screen_locker() || allow_new_user) {
342 // Starts authentication if guest login is allowed or online auth pending. 330 // Starts authentication if guest login is allowed or online auth pending.
343 StartAuthentication(); 331 StartAuthentication();
344 } else { 332 } else {
345 // Otherwise, do whitelist check first. 333 const ListValue *user_list;
346 PrefService* local_state = g_browser_process->local_state(); 334 if (cros_settings->GetList(kAccountsPrefUsers, &user_list) &&
347 CHECK(local_state); 335 user_list->Find(StringValue(username)) != user_list->end()) {
348 if (local_state->IsManagedPreference(kAccountsPrefUsers)) { 336 StartAuthentication();
349 if (UserCrosSettingsProvider::IsEmailInCachedWhitelist(username)) {
350 StartAuthentication();
351 } else {
352 if (delegate_)
353 delegate_->WhiteListCheckFailed(username);
354 else
355 NOTREACHED();
356 }
357 } else { 337 } else {
358 // In case of signed settings: with current implementation we do not 338 if (delegate_)
359 // trust whitelist returned by PrefService. So make separate check. 339 delegate_->WhiteListCheckFailed(username);
360 SignedSettingsHelper::Get()->StartCheckWhitelistOp( 340 else
361 username, this); 341 NOTREACHED();
362 } 342 }
363 } 343 }
364 } 344 }
365 345
366 void LoginPerformer::LoginOffTheRecord() { 346 void LoginPerformer::LoginOffTheRecord() {
367 authenticator_ = LoginUtils::Get()->CreateAuthenticator(this); 347 authenticator_ = LoginUtils::Get()->CreateAuthenticator(this);
368 BrowserThread::PostTask( 348 BrowserThread::PostTask(
369 BrowserThread::UI, FROM_HERE, 349 BrowserThread::UI, FROM_HERE,
370 NewRunnableMethod(authenticator_.get(), 350 NewRunnableMethod(authenticator_.get(),
371 &Authenticator::LoginOffTheRecord)); 351 &Authenticator::LoginOffTheRecord));
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 profile, 567 profile,
588 username_, 568 username_,
589 password_, 569 password_,
590 captcha_token_, 570 captcha_token_,
591 captcha_)); 571 captcha_));
592 } 572 }
593 password_.clear(); 573 password_.clear();
594 } 574 }
595 575
596 } // namespace chromeos 576 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698