| Index: chromeos/tpm_token_info_getter.cc
|
| diff --git a/chromeos/tpm_token_info_getter.cc b/chromeos/tpm_token_info_getter.cc
|
| deleted file mode 100644
|
| index 42a221b97819a04cd641007530ff02ebd65f0988..0000000000000000000000000000000000000000
|
| --- a/chromeos/tpm_token_info_getter.cc
|
| +++ /dev/null
|
| @@ -1,162 +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_info_getter.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/location.h"
|
| -#include "chromeos/dbus/cryptohome_client.h"
|
| -
|
| -namespace {
|
| -
|
| -const int64 kInitialRequestDelayMs = 100;
|
| -const int64 kMaxRequestDelayMs = 300000; // 5 minutes
|
| -
|
| -// Calculates the delay before running next attempt to initiatialize the TPM
|
| -// token, if |last_delay| was the last or initial delay.
|
| -base::TimeDelta GetNextRequestDelayMs(base::TimeDelta last_delay) {
|
| - // This implements an exponential backoff, as we don't know in which order of
|
| - // magnitude the TPM token changes it's state.
|
| - base::TimeDelta next_delay = last_delay * 2;
|
| -
|
| - // Cap the delay to prevent an overflow. This threshold is arbitrarily chosen.
|
| - const base::TimeDelta max_delay =
|
| - base::TimeDelta::FromMilliseconds(kMaxRequestDelayMs);
|
| - if (next_delay > max_delay)
|
| - next_delay = max_delay;
|
| - return next_delay;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace chromeos {
|
| -
|
| -TPMTokenInfo::TPMTokenInfo()
|
| - : tpm_is_enabled(false),
|
| - token_slot_id(-1) {
|
| -}
|
| -
|
| -TPMTokenInfo::~TPMTokenInfo() {}
|
| -
|
| -// static
|
| -scoped_ptr<TPMTokenInfoGetter> TPMTokenInfoGetter::CreateForUserToken(
|
| - const std::string& user_id,
|
| - CryptohomeClient* cryptohome_client,
|
| - const scoped_refptr<base::TaskRunner>& delayed_task_runner) {
|
| - CHECK(!user_id.empty());
|
| - return scoped_ptr<TPMTokenInfoGetter>(
|
| - new TPMTokenInfoGetter(
|
| - TYPE_USER, user_id, cryptohome_client, delayed_task_runner));
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<TPMTokenInfoGetter> TPMTokenInfoGetter::CreateForSystemToken(
|
| - CryptohomeClient* cryptohome_client,
|
| - const scoped_refptr<base::TaskRunner>& delayed_task_runner) {
|
| - return scoped_ptr<TPMTokenInfoGetter>(
|
| - new TPMTokenInfoGetter(
|
| - TYPE_SYSTEM, std::string(), cryptohome_client, delayed_task_runner));
|
| -}
|
| -
|
| -TPMTokenInfoGetter::~TPMTokenInfoGetter() {}
|
| -
|
| -void TPMTokenInfoGetter::Start(const TPMTokenInfoCallback& callback) {
|
| - CHECK(state_ == STATE_INITIAL);
|
| - CHECK(!callback.is_null());
|
| -
|
| - callback_ = callback;
|
| -
|
| - state_ = STATE_STARTED;
|
| - Continue();
|
| -}
|
| -
|
| -TPMTokenInfoGetter::TPMTokenInfoGetter(
|
| - TPMTokenInfoGetter::Type type,
|
| - const std::string& user_id,
|
| - CryptohomeClient* cryptohome_client,
|
| - const scoped_refptr<base::TaskRunner>& delayed_task_runner)
|
| - : delayed_task_runner_(delayed_task_runner),
|
| - type_(type),
|
| - state_(TPMTokenInfoGetter::STATE_INITIAL),
|
| - user_id_(user_id),
|
| - tpm_request_delay_(
|
| - base::TimeDelta::FromMilliseconds(kInitialRequestDelayMs)),
|
| - cryptohome_client_(cryptohome_client),
|
| - weak_factory_(this) {
|
| -}
|
| -
|
| -void TPMTokenInfoGetter::Continue() {
|
| - switch (state_) {
|
| - case STATE_INITIAL:
|
| - NOTREACHED();
|
| - break;
|
| - case STATE_STARTED:
|
| - cryptohome_client_->TpmIsEnabled(
|
| - base::Bind(&TPMTokenInfoGetter::OnTpmIsEnabled,
|
| - weak_factory_.GetWeakPtr()));
|
| - break;
|
| - case STATE_TPM_ENABLED:
|
| - if (type_ == TYPE_SYSTEM) {
|
| - cryptohome_client_->Pkcs11GetTpmTokenInfo(
|
| - base::Bind(&TPMTokenInfoGetter::OnPkcs11GetTpmTokenInfo,
|
| - weak_factory_.GetWeakPtr()));
|
| - } else { // if (type_ == TYPE_USER)
|
| - cryptohome_client_->Pkcs11GetTpmTokenInfoForUser(
|
| - user_id_,
|
| - base::Bind(&TPMTokenInfoGetter::OnPkcs11GetTpmTokenInfo,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| - break;
|
| - case STATE_DONE:
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -void TPMTokenInfoGetter::RetryLater() {
|
| - delayed_task_runner_->PostDelayedTask(
|
| - FROM_HERE,
|
| - base::Bind(&TPMTokenInfoGetter::Continue, weak_factory_.GetWeakPtr()),
|
| - tpm_request_delay_);
|
| - tpm_request_delay_ = GetNextRequestDelayMs(tpm_request_delay_);
|
| -}
|
| -
|
| -void TPMTokenInfoGetter::OnTpmIsEnabled(DBusMethodCallStatus call_status,
|
| - bool tpm_is_enabled) {
|
| - if (call_status != DBUS_METHOD_CALL_SUCCESS) {
|
| - RetryLater();
|
| - return;
|
| - }
|
| -
|
| - if (!tpm_is_enabled) {
|
| - state_ = STATE_DONE;
|
| - callback_.Run(TPMTokenInfo());
|
| - return;
|
| - }
|
| -
|
| - state_ = STATE_TPM_ENABLED;
|
| - Continue();
|
| -}
|
| -
|
| -void TPMTokenInfoGetter::OnPkcs11GetTpmTokenInfo(
|
| - DBusMethodCallStatus call_status,
|
| - const std::string& token_name,
|
| - const std::string& user_pin,
|
| - int token_slot_id) {
|
| - if (call_status == DBUS_METHOD_CALL_FAILURE || token_slot_id == -1) {
|
| - RetryLater();
|
| - return;
|
| - }
|
| -
|
| - state_ = STATE_DONE;
|
| -
|
| - TPMTokenInfo token_info;
|
| - token_info.tpm_is_enabled = true;
|
| - token_info.token_name = token_name;
|
| - token_info.user_pin = user_pin;
|
| - token_info.token_slot_id = token_slot_id;
|
| -
|
| - callback_.Run(token_info);
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|