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

Side by Side Diff: chrome/browser/signin/easy_unlock_service.cc

Issue 1113043004: [Smart Lock] Extract the screenlock state to the proximity_auth component. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unit tests compile Created 5 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/signin/easy_unlock_service.h" 5 #include "chrome/browser/signin/easy_unlock_service.h"
6 6
7 #include "apps/app_lifetime_monitor.h" 7 #include "apps/app_lifetime_monitor.h"
8 #include "apps/app_lifetime_monitor_factory.h" 8 #include "apps/app_lifetime_monitor_factory.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "chrome/browser/chromeos/profiles/profile_helper.h" 42 #include "chrome/browser/chromeos/profiles/profile_helper.h"
43 #include "chromeos/dbus/dbus_thread_manager.h" 43 #include "chromeos/dbus/dbus_thread_manager.h"
44 #include "chromeos/dbus/power_manager_client.h" 44 #include "chromeos/dbus/power_manager_client.h"
45 #include "components/user_manager/user_manager.h" 45 #include "components/user_manager/user_manager.h"
46 #endif 46 #endif
47 47
48 #if defined(OS_WIN) 48 #if defined(OS_WIN)
49 #include "base/win/windows_version.h" 49 #include "base/win/windows_version.h"
50 #endif 50 #endif
51 51
52 using proximity_auth::ScreenlockState;
53
52 namespace { 54 namespace {
53 55
54 enum BluetoothType { 56 enum BluetoothType {
55 BT_NO_ADAPTER, 57 BT_NO_ADAPTER,
56 BT_NORMAL, 58 BT_NORMAL,
57 BT_LOW_ENERGY_CAPABLE, 59 BT_LOW_ENERGY_CAPABLE,
58 BT_MAX_TYPE 60 BT_MAX_TYPE
59 }; 61 };
60 62
61 PrefService* GetLocalState() { 63 PrefService* GetLocalState() {
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 if (!GetScreenlockStateHandler()) 429 if (!GetScreenlockStateHandler())
428 return; 430 return;
429 431
430 EasyUnlockScreenlockStateHandler::HardlockState state; 432 EasyUnlockScreenlockStateHandler::HardlockState state;
431 bool has_persisted_state = GetPersistedHardlockState(&state); 433 bool has_persisted_state = GetPersistedHardlockState(&state);
432 if (!has_persisted_state) 434 if (!has_persisted_state)
433 return; 435 return;
434 436
435 if (state == EasyUnlockScreenlockStateHandler::NO_HARDLOCK) { 437 if (state == EasyUnlockScreenlockStateHandler::NO_HARDLOCK) {
436 // Show connecting icon early when there is a persisted non hardlock state. 438 // Show connecting icon early when there is a persisted non hardlock state.
437 UpdateScreenlockState( 439 UpdateScreenlockState(ScreenlockState::BLUETOOTH_CONNECTING);
438 EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
439 } else { 440 } else {
440 screenlock_state_handler_->MaybeShowHardlockUI(); 441 screenlock_state_handler_->MaybeShowHardlockUI();
441 } 442 }
442 } 443 }
443 444
444 EasyUnlockScreenlockStateHandler* 445 EasyUnlockScreenlockStateHandler*
445 EasyUnlockService::GetScreenlockStateHandler() { 446 EasyUnlockService::GetScreenlockStateHandler() {
446 if (!IsAllowed()) 447 if (!IsAllowed())
447 return NULL; 448 return NULL;
448 if (!screenlock_state_handler_) { 449 if (!screenlock_state_handler_) {
449 screenlock_state_handler_.reset(new EasyUnlockScreenlockStateHandler( 450 screenlock_state_handler_.reset(new EasyUnlockScreenlockStateHandler(
450 GetUserEmail(), GetHardlockState(), GetScreenlockBridgeInstance())); 451 GetUserEmail(), GetHardlockState(), GetScreenlockBridgeInstance()));
451 } 452 }
452 return screenlock_state_handler_.get(); 453 return screenlock_state_handler_.get();
453 } 454 }
454 455
455 bool EasyUnlockService::UpdateScreenlockState( 456 bool EasyUnlockService::UpdateScreenlockState(ScreenlockState state) {
456 EasyUnlockScreenlockStateHandler::State state) {
457 EasyUnlockScreenlockStateHandler* handler = GetScreenlockStateHandler(); 457 EasyUnlockScreenlockStateHandler* handler = GetScreenlockStateHandler();
458 if (!handler) 458 if (!handler)
459 return false; 459 return false;
460 460
461 handler->ChangeState(state); 461 handler->ChangeState(state);
462 462
463 if (state == EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED) { 463 if (state == ScreenlockState::AUTHENTICATED) {
464 #if defined(OS_CHROMEOS) 464 #if defined(OS_CHROMEOS)
465 if (power_monitor_) 465 if (power_monitor_)
466 power_monitor_->RecordStartUpTime(); 466 power_monitor_->RecordStartUpTime();
467 #endif 467 #endif
468 } else if (auth_attempt_.get()) { 468 } else if (auth_attempt_.get()) {
469 // Clean up existing auth attempt if we can no longer authenticate the 469 // Clean up existing auth attempt if we can no longer authenticate the
470 // remote device. 470 // remote device.
471 auth_attempt_.reset(); 471 auth_attempt_.reset();
472 472
473 if (!handler->InStateValidOnRemoteAuthFailure()) 473 if (!handler->InStateValidOnRemoteAuthFailure())
474 HandleAuthFailure(GetUserEmail()); 474 HandleAuthFailure(GetUserEmail());
475 } 475 }
476 476
477 FOR_EACH_OBSERVER( 477 FOR_EACH_OBSERVER(
478 EasyUnlockServiceObserver, observers_, OnScreenlockStateChanged(state)); 478 EasyUnlockServiceObserver, observers_, OnScreenlockStateChanged(state));
479 return true; 479 return true;
480 } 480 }
481 481
482 EasyUnlockScreenlockStateHandler::State 482 ScreenlockState EasyUnlockService::GetScreenlockState() {
483 EasyUnlockService::GetScreenlockState() {
484 EasyUnlockScreenlockStateHandler* handler = GetScreenlockStateHandler(); 483 EasyUnlockScreenlockStateHandler* handler = GetScreenlockStateHandler();
485 if (!handler) 484 if (!handler)
486 return EasyUnlockScreenlockStateHandler::STATE_INACTIVE; 485 return ScreenlockState::INACTIVE;
487 486
488 return handler->state(); 487 return handler->state();
489 } 488 }
490 489
491 void EasyUnlockService::AttemptAuth(const std::string& user_id) { 490 void EasyUnlockService::AttemptAuth(const std::string& user_id) {
492 AttemptAuth(user_id, AttemptAuthCallback()); 491 AttemptAuth(user_id, AttemptAuthCallback());
493 } 492 }
494 493
495 void EasyUnlockService::AttemptAuth(const std::string& user_id, 494 void EasyUnlockService::AttemptAuth(const std::string& user_id,
496 const AttemptAuthCallback& callback) { 495 const AttemptAuthCallback& callback) {
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 return PASSWORD_ENTRY_PAIRING_CHANGED; 768 return PASSWORD_ENTRY_PAIRING_CHANGED;
770 case EasyUnlockScreenlockStateHandler::LOGIN_FAILED: 769 case EasyUnlockScreenlockStateHandler::LOGIN_FAILED:
771 return PASSWORD_ENTRY_LOGIN_FAILED; 770 return PASSWORD_ENTRY_LOGIN_FAILED;
772 case EasyUnlockScreenlockStateHandler::PAIRING_ADDED: 771 case EasyUnlockScreenlockStateHandler::PAIRING_ADDED:
773 return PASSWORD_ENTRY_PAIRING_ADDED; 772 return PASSWORD_ENTRY_PAIRING_ADDED;
774 } 773 }
775 } else if (!screenlock_state_handler()) { 774 } else if (!screenlock_state_handler()) {
776 return PASSWORD_ENTRY_NO_SCREENLOCK_STATE_HANDLER; 775 return PASSWORD_ENTRY_NO_SCREENLOCK_STATE_HANDLER;
777 } else { 776 } else {
778 switch (screenlock_state_handler()->state()) { 777 switch (screenlock_state_handler()->state()) {
779 case EasyUnlockScreenlockStateHandler::STATE_INACTIVE: 778 case ScreenlockState::INACTIVE:
780 return PASSWORD_ENTRY_SERVICE_NOT_ACTIVE; 779 return PASSWORD_ENTRY_SERVICE_NOT_ACTIVE;
781 case EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH: 780 case ScreenlockState::NO_BLUETOOTH:
782 return PASSWORD_ENTRY_NO_BLUETOOTH; 781 return PASSWORD_ENTRY_NO_BLUETOOTH;
783 case EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING: 782 case ScreenlockState::BLUETOOTH_CONNECTING:
784 return PASSWORD_ENTRY_BLUETOOTH_CONNECTING; 783 return PASSWORD_ENTRY_BLUETOOTH_CONNECTING;
785 case EasyUnlockScreenlockStateHandler::STATE_NO_PHONE: 784 case ScreenlockState::NO_PHONE:
786 return PASSWORD_ENTRY_NO_PHONE; 785 return PASSWORD_ENTRY_NO_PHONE;
787 case EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED: 786 case ScreenlockState::PHONE_NOT_AUTHENTICATED:
788 return PASSWORD_ENTRY_PHONE_NOT_AUTHENTICATED; 787 return PASSWORD_ENTRY_PHONE_NOT_AUTHENTICATED;
789 case EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED: 788 case ScreenlockState::PHONE_LOCKED:
790 return PASSWORD_ENTRY_PHONE_LOCKED; 789 return PASSWORD_ENTRY_PHONE_LOCKED;
791 case EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE: 790 case ScreenlockState::PHONE_NOT_LOCKABLE:
792 return PASSWORD_ENTRY_PHONE_NOT_LOCKABLE; 791 return PASSWORD_ENTRY_PHONE_NOT_LOCKABLE;
793 case EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED: 792 case ScreenlockState::PHONE_UNSUPPORTED:
794 return PASSWORD_ENTRY_PHONE_UNSUPPORTED; 793 return PASSWORD_ENTRY_PHONE_UNSUPPORTED;
795 case EasyUnlockScreenlockStateHandler::STATE_RSSI_TOO_LOW: 794 case ScreenlockState::RSSI_TOO_LOW:
796 return PASSWORD_ENTRY_RSSI_TOO_LOW; 795 return PASSWORD_ENTRY_RSSI_TOO_LOW;
797 case EasyUnlockScreenlockStateHandler::STATE_TX_POWER_TOO_HIGH: 796 case ScreenlockState::TX_POWER_TOO_HIGH:
798 return PASSWORD_ENTRY_TX_POWER_TOO_HIGH; 797 return PASSWORD_ENTRY_TX_POWER_TOO_HIGH;
799 case EasyUnlockScreenlockStateHandler:: 798 case ScreenlockState::PHONE_LOCKED_AND_TX_POWER_TOO_HIGH:
800 STATE_PHONE_LOCKED_AND_TX_POWER_TOO_HIGH:
801 return PASSWORD_ENTRY_PHONE_LOCKED_AND_TX_POWER_TOO_HIGH; 799 return PASSWORD_ENTRY_PHONE_LOCKED_AND_TX_POWER_TOO_HIGH;
802 case EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED: 800 case ScreenlockState::AUTHENTICATED:
803 return PASSWORD_ENTRY_WITH_AUTHENTICATED_PHONE; 801 return PASSWORD_ENTRY_WITH_AUTHENTICATED_PHONE;
804 } 802 }
805 } 803 }
806 804
807 NOTREACHED(); 805 NOTREACHED();
808 return EASY_UNLOCK_AUTH_EVENT_COUNT; 806 return EASY_UNLOCK_AUTH_EVENT_COUNT;
809 } 807 }
810 808
811 #if defined(OS_CHROMEOS) 809 #if defined(OS_CHROMEOS)
812 void EasyUnlockService::OnCryptohomeKeysFetchedForChecking( 810 void EasyUnlockService::OnCryptohomeKeysFetchedForChecking(
(...skipping 19 matching lines...) Expand all
832 user_id, 830 user_id,
833 devices_in_cryptohome.empty() 831 devices_in_cryptohome.empty()
834 ? EasyUnlockScreenlockStateHandler::PAIRING_ADDED 832 ? EasyUnlockScreenlockStateHandler::PAIRING_ADDED
835 : EasyUnlockScreenlockStateHandler::PAIRING_CHANGED); 833 : EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
836 } 834 }
837 } 835 }
838 #endif 836 #endif
839 837
840 void EasyUnlockService::PrepareForSuspend() { 838 void EasyUnlockService::PrepareForSuspend() {
841 app_manager_->DisableAppIfLoaded(); 839 app_manager_->DisableAppIfLoaded();
842 if (screenlock_state_handler_ && screenlock_state_handler_->IsActive()) { 840 if (screenlock_state_handler_ && screenlock_state_handler_->IsActive())
843 UpdateScreenlockState( 841 UpdateScreenlockState(ScreenlockState::BLUETOOTH_CONNECTING);
844 EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
845 }
846 } 842 }
847 843
848 void EasyUnlockService::EnsureTpmKeyPresentIfNeeded() { 844 void EasyUnlockService::EnsureTpmKeyPresentIfNeeded() {
849 if (tpm_key_checked_ || GetType() != TYPE_REGULAR || GetUserEmail().empty() || 845 if (tpm_key_checked_ || GetType() != TYPE_REGULAR || GetUserEmail().empty() ||
850 GetHardlockState() == EasyUnlockScreenlockStateHandler::NO_PAIRING) { 846 GetHardlockState() == EasyUnlockScreenlockStateHandler::NO_PAIRING) {
851 return; 847 return;
852 } 848 }
853 849
854 #if defined(OS_CHROMEOS) 850 #if defined(OS_CHROMEOS)
855 // If this is called before the session is started, the chances are Chrome 851 // If this is called before the session is started, the chances are Chrome
856 // is restarting in order to apply user flags. Don't check TPM keys in this 852 // is restarting in order to apply user flags. Don't check TPM keys in this
857 // case. 853 // case.
858 if (!user_manager::UserManager::Get() || 854 if (!user_manager::UserManager::Get() ||
859 !user_manager::UserManager::Get()->IsSessionStarted()) 855 !user_manager::UserManager::Get()->IsSessionStarted())
860 return; 856 return;
861 857
862 // TODO(tbarzic): Set check_private_key only if previous sign-in attempt 858 // TODO(tbarzic): Set check_private_key only if previous sign-in attempt
863 // failed. 859 // failed.
864 EasyUnlockTpmKeyManagerFactory::GetInstance()->Get(profile_) 860 EasyUnlockTpmKeyManagerFactory::GetInstance()->Get(profile_)
865 ->PrepareTpmKey(true /* check_private_key */, 861 ->PrepareTpmKey(true /* check_private_key */,
866 base::Closure()); 862 base::Closure());
867 #endif // defined(OS_CHROMEOS) 863 #endif // defined(OS_CHROMEOS)
868 864
869 tpm_key_checked_ = true; 865 tpm_key_checked_ = true;
870 } 866 }
OLDNEW
« no previous file with comments | « chrome/browser/signin/easy_unlock_service.h ('k') | chrome/browser/signin/easy_unlock_service_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698