| Index: chromeos/tpm_token_loader.cc
|
| diff --git a/chromeos/tpm_token_loader.cc b/chromeos/tpm_token_loader.cc
|
| deleted file mode 100644
|
| index 4f17bf5595747345fb65f820903762b449d4eafb..0000000000000000000000000000000000000000
|
| --- a/chromeos/tpm_token_loader.cc
|
| +++ /dev/null
|
| @@ -1,231 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chromeos/tpm_token_loader.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/location.h"
|
| -#include "base/sequenced_task_runner.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/sys_info.h"
|
| -#include "base/task_runner_util.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| -#include "chromeos/dbus/dbus_thread_manager.h"
|
| -#include "chromeos/tpm_token_info_getter.h"
|
| -#include "crypto/nss_util.h"
|
| -
|
| -namespace chromeos {
|
| -
|
| -namespace {
|
| -
|
| -void PostResultToTaskRunner(scoped_refptr<base::SequencedTaskRunner> runner,
|
| - const base::Callback<void(bool)>& callback,
|
| - bool success) {
|
| - runner->PostTask(FROM_HERE, base::Bind(callback, success));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -static TPMTokenLoader* g_tpm_token_loader = NULL;
|
| -
|
| -// static
|
| -void TPMTokenLoader::Initialize() {
|
| - CHECK(!g_tpm_token_loader);
|
| - g_tpm_token_loader = new TPMTokenLoader(false /*for_test*/);
|
| -}
|
| -
|
| -// static
|
| -void TPMTokenLoader::InitializeForTest() {
|
| - CHECK(!g_tpm_token_loader);
|
| - g_tpm_token_loader = new TPMTokenLoader(true /*for_test*/);
|
| -}
|
| -
|
| -// static
|
| -void TPMTokenLoader::Shutdown() {
|
| - CHECK(g_tpm_token_loader);
|
| - delete g_tpm_token_loader;
|
| - g_tpm_token_loader = NULL;
|
| -}
|
| -
|
| -// static
|
| -TPMTokenLoader* TPMTokenLoader::Get() {
|
| - CHECK(g_tpm_token_loader)
|
| - << "TPMTokenLoader::Get() called before Initialize()";
|
| - return g_tpm_token_loader;
|
| -}
|
| -
|
| -// static
|
| -bool TPMTokenLoader::IsInitialized() {
|
| - return g_tpm_token_loader;
|
| -}
|
| -
|
| -TPMTokenLoader::TPMTokenLoader(bool for_test)
|
| - : initialized_for_test_(for_test),
|
| - tpm_token_state_(TPM_STATE_UNKNOWN),
|
| - tpm_token_info_getter_(
|
| - TPMTokenInfoGetter::CreateForSystemToken(
|
| - DBusThreadManager::Get()->GetCryptohomeClient(),
|
| - base::ThreadTaskRunnerHandle::Get())),
|
| - tpm_token_slot_id_(-1),
|
| - weak_factory_(this) {
|
| - if (!initialized_for_test_ && LoginState::IsInitialized())
|
| - LoginState::Get()->AddObserver(this);
|
| -
|
| - if (initialized_for_test_) {
|
| - tpm_token_state_ = TPM_TOKEN_INITIALIZED;
|
| - tpm_user_pin_ = "111111";
|
| - }
|
| -}
|
| -
|
| -void TPMTokenLoader::SetCryptoTaskRunner(
|
| - const scoped_refptr<base::SequencedTaskRunner>& crypto_task_runner) {
|
| - crypto_task_runner_ = crypto_task_runner;
|
| - MaybeStartTokenInitialization();
|
| -}
|
| -
|
| -TPMTokenLoader::~TPMTokenLoader() {
|
| - if (!initialized_for_test_ && LoginState::IsInitialized())
|
| - LoginState::Get()->RemoveObserver(this);
|
| -}
|
| -
|
| -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::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() {
|
| - CHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - // This is the entry point to the TPM token initialization process,
|
| - // which we should do at most once.
|
| - if (tpm_token_state_ != TPM_STATE_UNKNOWN || !crypto_task_runner_.get())
|
| - return;
|
| -
|
| - if (!LoginState::IsInitialized())
|
| - return;
|
| -
|
| - bool start_initialization = LoginState::Get()->IsUserLoggedIn();
|
| -
|
| - VLOG(1) << "StartTokenInitialization: " << start_initialization;
|
| - if (!start_initialization)
|
| - return;
|
| -
|
| - if (!IsTPMLoadingEnabled())
|
| - tpm_token_state_ = TPM_DISABLED;
|
| -
|
| - ContinueTokenInitialization();
|
| -
|
| - DCHECK_NE(tpm_token_state_, TPM_STATE_UNKNOWN);
|
| -}
|
| -
|
| -void TPMTokenLoader::ContinueTokenInitialization() {
|
| - CHECK(thread_checker_.CalledOnValidThread());
|
| - VLOG(1) << "ContinueTokenInitialization: " << tpm_token_state_;
|
| -
|
| - switch (tpm_token_state_) {
|
| - case TPM_STATE_UNKNOWN: {
|
| - crypto_task_runner_->PostTaskAndReply(
|
| - FROM_HERE,
|
| - base::Bind(&crypto::EnableTPMTokenForNSS),
|
| - base::Bind(&TPMTokenLoader::OnTPMTokenEnabledForNSS,
|
| - weak_factory_.GetWeakPtr()));
|
| - tpm_token_state_ = TPM_INITIALIZATION_STARTED;
|
| - return;
|
| - }
|
| - case TPM_INITIALIZATION_STARTED: {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - case TPM_TOKEN_ENABLED_FOR_NSS: {
|
| - tpm_token_info_getter_->Start(
|
| - base::Bind(&TPMTokenLoader::OnGotTpmTokenInfo,
|
| - weak_factory_.GetWeakPtr()));
|
| - return;
|
| - }
|
| - case TPM_DISABLED: {
|
| - // TPM is disabled, so proceed with empty tpm token name.
|
| - NotifyTPMTokenReady();
|
| - return;
|
| - }
|
| - case TPM_TOKEN_INFO_RECEIVED: {
|
| - crypto_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(
|
| - &crypto::InitializeTPMTokenAndSystemSlot,
|
| - tpm_token_slot_id_,
|
| - base::Bind(&PostResultToTaskRunner,
|
| - base::ThreadTaskRunnerHandle::Get(),
|
| - base::Bind(&TPMTokenLoader::OnTPMTokenInitialized,
|
| - weak_factory_.GetWeakPtr()))));
|
| - return;
|
| - }
|
| - case TPM_TOKEN_INITIALIZED: {
|
| - NotifyTPMTokenReady();
|
| - return;
|
| - }
|
| - }
|
| -}
|
| -
|
| -void TPMTokenLoader::OnTPMTokenEnabledForNSS() {
|
| - VLOG(1) << "TPMTokenEnabledForNSS";
|
| - tpm_token_state_ = TPM_TOKEN_ENABLED_FOR_NSS;
|
| - ContinueTokenInitialization();
|
| -}
|
| -
|
| -void TPMTokenLoader::OnGotTpmTokenInfo(const TPMTokenInfo& token_info) {
|
| - if (!token_info.tpm_is_enabled) {
|
| - tpm_token_state_ = TPM_DISABLED;
|
| - ContinueTokenInitialization();
|
| - return;
|
| - }
|
| -
|
| - tpm_token_slot_id_ = token_info.token_slot_id;
|
| - tpm_user_pin_ = token_info.user_pin;
|
| - tpm_token_state_ = TPM_TOKEN_INFO_RECEIVED;
|
| -
|
| - ContinueTokenInitialization();
|
| -}
|
| -
|
| -void TPMTokenLoader::OnTPMTokenInitialized(bool success) {
|
| - VLOG(1) << "OnTPMTokenInitialized: " << success;
|
| -
|
| - tpm_token_state_ = success ? TPM_TOKEN_INITIALIZED : TPM_DISABLED;
|
| - ContinueTokenInitialization();
|
| -}
|
| -
|
| -void TPMTokenLoader::NotifyTPMTokenReady() {
|
| - 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() {
|
| - VLOG(1) << "LoggedInStateChanged";
|
| - MaybeStartTokenInitialization();
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|