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

Unified Diff: chromeos/tpm_token_loader.cc

Issue 419013003: Replace c/b/nss_context by a KeyedService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added Linux implementation. Created 6 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 side-by-side diff with in-line comments
Download patch
Index: chromeos/tpm_token_loader.cc
diff --git a/chromeos/tpm_token_loader.cc b/chromeos/tpm_token_loader.cc
index a469b845c9c444ad8d5bcdb563d6af87bddf67ef..531e12a451059b4e7547b60860ec73d9602bf444 100644
--- a/chromeos/tpm_token_loader.cc
+++ b/chromeos/tpm_token_loader.cc
@@ -50,6 +50,8 @@ static TPMTokenLoader* g_tpm_token_loader = NULL;
// static
void TPMTokenLoader::Initialize() {
+ if (g_tpm_token_loader && g_tpm_token_loader->initialized_for_test_)
+ return;
CHECK(!g_tpm_token_loader);
g_tpm_token_loader = new TPMTokenLoader(false /*for_test*/);
}
@@ -106,17 +108,24 @@ TPMTokenLoader::~TPMTokenLoader() {
LoginState::Get()->RemoveObserver(this);
}
-void TPMTokenLoader::AddObserver(TPMTokenLoader::Observer* observer) {
- observers_.AddObserver(observer);
-}
-
-void TPMTokenLoader::RemoveObserver(TPMTokenLoader::Observer* observer) {
- observers_.RemoveObserver(observer);
+TPMTokenLoader::TPMTokenStatus TPMTokenLoader::IsTPMTokenEnabled(
+ const TPMReadyCallback& callback) {
+ if (tpm_token_state_ == TPM_TOKEN_INITIALIZED)
+ return TPM_TOKEN_STATUS_ENABLED;
+ if (!IsTPMLoadingEnabled() || tpm_token_state_ == TPM_DISABLED)
+ return TPM_TOKEN_STATUS_DISABLED;
+ // Status is not known yet.
+ if (!callback.is_null())
+ tpm_ready_callback_list_.push_back(callback);
+ return TPM_TOKEN_STATUS_UNDETERMINED;
}
-bool TPMTokenLoader::IsTPMTokenReady() const {
- return tpm_token_state_ == TPM_DISABLED ||
- tpm_token_state_ == TPM_TOKEN_INITIALIZED;
+bool TPMTokenLoader::IsTPMLoadingEnabled() const {
+ // TPM loading is enabled on non-ChromeOS environments, e.g. when running
+ // tests on Linux.
+ // Treat TPM as disabled for guest users since they do not store certs.
+ return initialized_for_test_ || (base::SysInfo::IsRunningOnChromeOS() &&
+ LoginState::Get()->IsGuestSessionUser());
}
void TPMTokenLoader::MaybeStartTokenInitialization() {
@@ -136,11 +145,7 @@ void TPMTokenLoader::MaybeStartTokenInitialization() {
if (!start_initialization)
return;
- if (!base::SysInfo::IsRunningOnChromeOS())
- tpm_token_state_ = TPM_DISABLED;
-
- // Treat TPM as disabled for guest users since they do not store certs.
- if (LoginState::Get()->IsGuestSessionUser())
+ if (!IsTPMLoadingEnabled())
tpm_token_state_ = TPM_DISABLED;
ContinueTokenInitialization();
@@ -240,7 +245,7 @@ void TPMTokenLoader::OnTpmIsEnabled(DBusMethodCallStatus call_status,
}
void TPMTokenLoader::OnPkcs11IsTpmTokenReady(DBusMethodCallStatus call_status,
- bool is_tpm_token_ready) {
+ bool is_tpm_token_ready) {
VLOG(1) << "OnPkcs11IsTpmTokenReady: " << is_tpm_token_ready;
if (call_status == DBUS_METHOD_CALL_FAILURE || !is_tpm_token_ready) {
@@ -281,7 +286,15 @@ void TPMTokenLoader::OnTPMTokenInitialized(bool success) {
}
void TPMTokenLoader::NotifyTPMTokenReady() {
- FOR_EACH_OBSERVER(Observer, observers_, OnTPMTokenReady());
+ DCHECK(tpm_token_state_ == TPM_DISABLED ||
+ tpm_token_state_ == TPM_TOKEN_INITIALIZED);
+ bool tpm_status = tpm_token_state_ == TPM_TOKEN_INITIALIZED;
+ for (TPMReadyCallbackList::iterator i = tpm_ready_callback_list_.begin();
+ i != tpm_ready_callback_list_.end();
+ ++i) {
+ i->Run(tpm_status);
+ }
+ tpm_ready_callback_list_.clear();
}
void TPMTokenLoader::LoggedInStateChanged() {

Powered by Google App Engine
This is Rietveld 408576698