| Index: tpm_init.cc
|
| diff --git a/tpm_init.cc b/tpm_init.cc
|
| index 06d70d2cd55a2073b1db8580b1e4e302b1006de3..ddd287a51a86c4f63bb25706042aa65d40141bb6 100644
|
| --- a/tpm_init.cc
|
| +++ b/tpm_init.cc
|
| @@ -20,7 +20,7 @@ class TpmInitTask : public PlatformThread::Delegate {
|
| TpmInitTask();
|
| virtual ~TpmInitTask();
|
|
|
| - void Init();
|
| + void Init(TpmInit::TpmInitCallback* notify_callback);
|
|
|
| virtual void ThreadMain();
|
|
|
| @@ -35,25 +35,31 @@ class TpmInitTask : public PlatformThread::Delegate {
|
| private:
|
| scoped_ptr<tpm_init::Tpm> default_tpm_;
|
| tpm_init::Tpm* tpm_;
|
| - bool initialize_status_;
|
| + bool initialize_took_ownership_;
|
| bool task_done_;
|
| long initialization_time_;
|
| + TpmInit::TpmInitCallback* notify_callback_;
|
| };
|
|
|
| TpmInit::TpmInit()
|
| - : tpm_init_(new TpmInitTask()) {
|
| + : tpm_init_task_(new TpmInitTask()),
|
| + notify_callback_(NULL) {
|
| }
|
|
|
| TpmInit::~TpmInit() {
|
| }
|
|
|
| +void TpmInit::Init(TpmInitCallback* notify_callback) {
|
| + notify_callback_ = notify_callback;
|
| +}
|
| +
|
| bool TpmInit::GetRandomData(int length, chromeos::Blob* data) {
|
| - return tpm_init_->GetRandomData(length, data);
|
| + return tpm_init_task_->GetRandomData(length, data);
|
| }
|
|
|
| bool TpmInit::StartInitializeTpm() {
|
| - tpm_init_->Init();
|
| - if (!PlatformThread::CreateNonJoinable(0, tpm_init_.get())) {
|
| + tpm_init_task_->Init(notify_callback_);
|
| + if (!PlatformThread::CreateNonJoinable(0, tpm_init_task_.get())) {
|
| LOG(ERROR) << "Unable to create TPM initialization background thread.";
|
| return false;
|
| }
|
| @@ -61,53 +67,59 @@ bool TpmInit::StartInitializeTpm() {
|
| }
|
|
|
| bool TpmInit::IsTpmReady() {
|
| - return tpm_init_->IsTpmReady();
|
| + return tpm_init_task_->IsTpmReady();
|
| }
|
|
|
| bool TpmInit::IsTpmEnabled() {
|
| - return tpm_init_->IsTpmEnabled();
|
| + return tpm_init_task_->IsTpmEnabled();
|
| }
|
|
|
| bool TpmInit::IsTpmOwned() {
|
| - return tpm_init_->IsTpmOwned();
|
| + return tpm_init_task_->IsTpmOwned();
|
| }
|
|
|
| bool TpmInit::IsTpmBeingOwned() {
|
| - return tpm_init_->IsTpmBeingOwned();
|
| + return tpm_init_task_->IsTpmBeingOwned();
|
| }
|
|
|
| bool TpmInit::GetTpmPassword(chromeos::Blob* password) {
|
| - return tpm_init_->GetTpmPassword(password);
|
| + return tpm_init_task_->GetTpmPassword(password);
|
| }
|
|
|
| long TpmInit::GetInitializationMillis() {
|
| - return tpm_init_->GetInitializationMillis();
|
| + return tpm_init_task_->GetInitializationMillis();
|
| }
|
|
|
| TpmInitTask::TpmInitTask()
|
| : default_tpm_(new tpm_init::Tpm()),
|
| tpm_(default_tpm_.get()),
|
| - initialize_status_(false),
|
| + initialize_took_ownership_(false),
|
| task_done_(false),
|
| - initialization_time_(-1) {
|
| + initialization_time_(-1),
|
| + notify_callback_(NULL) {
|
| }
|
|
|
| TpmInitTask::~TpmInitTask() {
|
| }
|
|
|
| -void TpmInitTask::Init() {
|
| +void TpmInitTask::Init(TpmInit::TpmInitCallback* notify_callback) {
|
| + notify_callback_ = notify_callback;
|
| tpm_->Init();
|
| }
|
|
|
| void TpmInitTask::ThreadMain() {
|
| base::TimeTicks start = base::TimeTicks::Now();
|
| - initialize_status_ = tpm_->InitializeTpm();
|
| + bool initialize_result = tpm_->InitializeTpm(&initialize_took_ownership_);
|
| base::TimeDelta delta = (base::TimeTicks::Now() - start);
|
| initialization_time_ = delta.InMilliseconds();
|
| - if (initialize_status_) {
|
| + if (initialize_took_ownership_) {
|
| LOG(ERROR) << "TPM initialization took " << initialization_time_ << "ms";
|
| }
|
| task_done_ = true;
|
| + if (notify_callback_) {
|
| + notify_callback_->InitializeTpmComplete(initialize_result,
|
| + initialize_took_ownership_);
|
| + }
|
| }
|
|
|
| bool TpmInitTask::IsTpmReady() {
|
| @@ -116,9 +128,9 @@ bool TpmInitTask::IsTpmReady() {
|
| if (!task_done_) {
|
| return false;
|
| }
|
| - // If initialize_status_ is true, then the TPM went through a full succesful
|
| - // ownership cycle in InitializeTpm()
|
| - if (initialize_status_) {
|
| + // If initialize_took_ownership_ is true, then the TPM went through a full
|
| + // succesful ownership cycle in InitializeTpm()
|
| + if (initialize_took_ownership_) {
|
| return true;
|
| }
|
| // If we get here, then the call to InitializeTpm() is complete and it
|
|
|