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

Unified Diff: tpm_init.cc

Issue 3475009: Adds the necessary changes to tpm_init to allow triggered initialization. (Closed) Base URL: http://git.chromium.org/git/tpm_init.git
Patch Set: Address feedback. Created 10 years, 2 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
« no previous file with comments | « tpm_init.h ('k') | tpm_status.proto » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tpm_init.cc
diff --git a/tpm_init.cc b/tpm_init.cc
index ddd287a51a86c4f63bb25706042aa65d40141bb6..3178790fb89f4e8c0372ef8abed6d4c586eeccd2 100644
--- a/tpm_init.cc
+++ b/tpm_init.cc
@@ -7,6 +7,7 @@
#include "tpm_init.h"
#include <base/logging.h>
+#include <base/platform_thread.h>
#include <base/time.h>
#include "tpm.h"
@@ -17,33 +18,47 @@ namespace tpm_init {
// the TPM.
class TpmInitTask : public PlatformThread::Delegate {
public:
- TpmInitTask();
- virtual ~TpmInitTask();
+ TpmInitTask()
+ : default_tpm_(new tpm_init::Tpm()),
+ tpm_(default_tpm_.get()),
+ init_(NULL) {
+ }
+
+ virtual ~TpmInitTask() {
+ }
+
+ void Init(TpmInit* init) {
+ init_ = init;
+ tpm_->Init();
+ }
- void Init(TpmInit::TpmInitCallback* notify_callback);
+ virtual void ThreadMain() {
+ if (init_) {
+ init_->ThreadMain();
+ }
+ }
- virtual void ThreadMain();
+ void set_tpm(tpm_init::Tpm* tpm) {
+ tpm_ = tpm;
+ }
- bool IsTpmReady();
- bool IsTpmEnabled();
- bool IsTpmOwned();
- bool IsTpmBeingOwned();
- bool GetTpmPassword(chromeos::Blob* password);
- long GetInitializationMillis();
- bool GetRandomData(int length, chromeos::Blob* data);
+ tpm_init::Tpm* get_tpm() {
+ return tpm_;
+ }
private:
scoped_ptr<tpm_init::Tpm> default_tpm_;
tpm_init::Tpm* tpm_;
- bool initialize_took_ownership_;
- bool task_done_;
- long initialization_time_;
- TpmInit::TpmInitCallback* notify_callback_;
+ TpmInit* init_;
};
TpmInit::TpmInit()
: tpm_init_task_(new TpmInitTask()),
- notify_callback_(NULL) {
+ notify_callback_(NULL),
+ initialize_called_(false),
+ task_done_(false),
+ initialize_took_ownership_(false),
+ initialization_time_(0) {
}
TpmInit::~TpmInit() {
@@ -51,14 +66,15 @@ TpmInit::~TpmInit() {
void TpmInit::Init(TpmInitCallback* notify_callback) {
notify_callback_ = notify_callback;
+ tpm_init_task_->Init(this);
}
bool TpmInit::GetRandomData(int length, chromeos::Blob* data) {
- return tpm_init_task_->GetRandomData(length, data);
+ return tpm_init_task_->get_tpm()->GetRandomData(length, data);
}
bool TpmInit::StartInitializeTpm() {
- tpm_init_task_->Init(notify_callback_);
+ initialize_called_ = true;
if (!PlatformThread::CreateNonJoinable(0, tpm_init_task_.get())) {
LOG(ERROR) << "Unable to create TPM initialization background thread.";
return false;
@@ -67,49 +83,56 @@ bool TpmInit::StartInitializeTpm() {
}
bool TpmInit::IsTpmReady() {
- return tpm_init_task_->IsTpmReady();
+ // The TPM is not "ready" if the init call has not completed. It may be in
+ // the middle of taking ownership.
+ if (!task_done_) {
+ return false;
+ }
+ // 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
+ // returned false. That merely means that it did not successfully take
+ // ownership, which is the common case after ownership is established on OOBE.
+ // In that case, the TPM is ready if it is enabled and owned.
+ return (tpm_init_task_->get_tpm()->IsEnabled() &&
+ tpm_init_task_->get_tpm()->IsOwned());
}
bool TpmInit::IsTpmEnabled() {
- return tpm_init_task_->IsTpmEnabled();
+ return tpm_init_task_->get_tpm()->IsEnabled();
}
bool TpmInit::IsTpmOwned() {
- return tpm_init_task_->IsTpmOwned();
+ return tpm_init_task_->get_tpm()->IsOwned();
}
bool TpmInit::IsTpmBeingOwned() {
- return tpm_init_task_->IsTpmBeingOwned();
+ return tpm_init_task_->get_tpm()->IsBeingOwned();
}
-bool TpmInit::GetTpmPassword(chromeos::Blob* password) {
- return tpm_init_task_->GetTpmPassword(password);
-}
-
-long TpmInit::GetInitializationMillis() {
- return tpm_init_task_->GetInitializationMillis();
+bool TpmInit::HasInitializeBeenCalled() {
+ return initialize_called_;
}
-TpmInitTask::TpmInitTask()
- : default_tpm_(new tpm_init::Tpm()),
- tpm_(default_tpm_.get()),
- initialize_took_ownership_(false),
- task_done_(false),
- initialization_time_(-1),
- notify_callback_(NULL) {
+bool TpmInit::GetTpmPassword(chromeos::Blob* password) {
+ return tpm_init_task_->get_tpm()->GetOwnerPassword(password);
}
-TpmInitTask::~TpmInitTask() {
+void TpmInit::ClearStoredTpmPassword() {
+ tpm_init_task_->get_tpm()->ClearStoredOwnerPassword();
}
-void TpmInitTask::Init(TpmInit::TpmInitCallback* notify_callback) {
- notify_callback_ = notify_callback;
- tpm_->Init();
+long TpmInit::GetInitializationMillis() {
+ return initialization_time_;
}
-void TpmInitTask::ThreadMain() {
+void TpmInit::ThreadMain() {
base::TimeTicks start = base::TimeTicks::Now();
- bool initialize_result = tpm_->InitializeTpm(&initialize_took_ownership_);
+ bool initialize_result = tpm_init_task_->get_tpm()->InitializeTpm(
+ &initialize_took_ownership_);
base::TimeDelta delta = (base::TimeTicks::Now() - start);
initialization_time_ = delta.InMilliseconds();
if (initialize_took_ownership_) {
@@ -122,46 +145,4 @@ void TpmInitTask::ThreadMain() {
}
}
-bool TpmInitTask::IsTpmReady() {
- // The TPM is not "ready" if the init call has not completed. It may be in
- // the middle of taking ownership.
- if (!task_done_) {
- return false;
- }
- // 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
- // returned false. That merely means that it did not successfully take
- // ownership, which is the common case after ownership is established on OOBE.
- // In that case, the TPM is ready if it is enabled and owned.
- return (tpm_->IsEnabled() && tpm_->IsOwned());
-}
-
-bool TpmInitTask::IsTpmEnabled() {
- return tpm_->IsEnabled();
-}
-
-bool TpmInitTask::IsTpmOwned() {
- return tpm_->IsOwned();
-}
-
-bool TpmInitTask::IsTpmBeingOwned() {
- return tpm_->IsBeingOwned();
-}
-
-bool TpmInitTask::GetTpmPassword(chromeos::Blob* password) {
- return tpm_->GetOwnerPassword(password);
-}
-
-long TpmInitTask::GetInitializationMillis() {
- return initialization_time_;
-}
-
-bool TpmInitTask::GetRandomData(int length, chromeos::Blob* data) {
- return tpm_->GetRandomData(length, data);
-}
-
} // namespace tpm_init
« no previous file with comments | « tpm_init.h ('k') | tpm_status.proto » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698