| Index: chromeos/tpm_token_loader.h | 
| diff --git a/chromeos/tpm_token_loader.h b/chromeos/tpm_token_loader.h | 
| index 16e20ef12e98d7054e172c0cdd9547f52ffada9e..33fffa2d19b55cb6d565742a68347bf759f9e236 100644 | 
| --- a/chromeos/tpm_token_loader.h | 
| +++ b/chromeos/tpm_token_loader.h | 
| @@ -32,16 +32,15 @@ namespace chromeos { | 
| // See CryptohomeClient::OnPkcs11GetTpmTokenInfo. | 
| class CHROMEOS_EXPORT TPMTokenLoader : public LoginState::Observer { | 
| public: | 
| -  class Observer { | 
| -   public: | 
| -    // Called when the TPM token initialization is done or the case where TPM | 
| -    // should stay disabled is detected (e.g. on guest login). | 
| -    virtual void OnTPMTokenReady() = 0; | 
| - | 
| -   protected: | 
| -    virtual ~Observer() {} | 
| +  enum TPMTokenStatus { | 
| +    TPM_TOKEN_STATUS_UNDETERMINED, | 
| +    TPM_TOKEN_STATUS_ENABLED, | 
| +    TPM_TOKEN_STATUS_DISABLED | 
| }; | 
|  | 
| +  typedef base::Callback<void(bool)> TPMReadyCallback; | 
| +  typedef std::vector<TPMReadyCallback> TPMReadyCallbackList; | 
| + | 
| // Sets the global instance. Must be called before any calls to Get(). | 
| // The global instance will immediately start observing |LoginState|. | 
| static void Initialize(); | 
| @@ -65,11 +64,9 @@ class CHROMEOS_EXPORT TPMTokenLoader : public LoginState::Observer { | 
| void SetCryptoTaskRunner( | 
| const scoped_refptr<base::SequencedTaskRunner>& crypto_task_runner); | 
|  | 
| -  void AddObserver(TPMTokenLoader::Observer* observer); | 
| -  void RemoveObserver(TPMTokenLoader::Observer* observer); | 
| - | 
| -  // Checks if the TPM token in ready to be used. | 
| -  bool IsTPMTokenReady() const; | 
| +  // Checks if the TPM token is enabled. If the state is unknown, |callback| | 
| +  // will be called back once the TPM state is known. | 
| +  TPMTokenStatus IsTPMTokenEnabled(const TPMReadyCallback& callback); | 
|  | 
| std::string tpm_user_pin() const { return tpm_user_pin_; } | 
|  | 
| @@ -77,6 +74,8 @@ class CHROMEOS_EXPORT TPMTokenLoader : public LoginState::Observer { | 
| explicit TPMTokenLoader(bool for_test); | 
| virtual ~TPMTokenLoader(); | 
|  | 
| +  bool IsTPMLoadingEnabled() const; | 
| + | 
| // Starts tpm token initialization if the user is logged in and the crypto | 
| // task runner is set. | 
| void MaybeStartTokenInitialization(); | 
| @@ -106,7 +105,7 @@ class CHROMEOS_EXPORT TPMTokenLoader : public LoginState::Observer { | 
|  | 
| bool initialized_for_test_; | 
|  | 
| -  ObserverList<Observer> observers_; | 
| +  TPMReadyCallbackList tpm_ready_callback_list_; | 
|  | 
| // The states are traversed in this order but some might get omitted or never | 
| // be left. | 
|  |