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

Unified Diff: chrome/browser/ui/webui/about_ui.cc

Issue 10703162: chromeos: Remove CryptohomeLibrary::TpmGetPassword and TpmIsReady (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix chromium style error Created 8 years, 5 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 | « chrome/browser/chromeos/login/tpm_password_fetcher.cc ('k') | chromeos/dbus/cryptohome_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/about_ui.cc
diff --git a/chrome/browser/ui/webui/about_ui.cc b/chrome/browser/ui/webui/about_ui.cc
index 856aca4958892b24c7e72be25441ad55b58e9e60..b6210fd951d385abd4ec607b95bc756b09b38526 100644
--- a/chrome/browser/ui/webui/about_ui.cc
+++ b/chrome/browser/ui/webui/about_ui.cc
@@ -521,58 +521,121 @@ std::string AddStringRow(const std::string& name, const std::string& value) {
return WrapWithTR(row);
}
-void FinishCryptohomeDataRequestInternal(
- scoped_refptr<AboutUIHTMLSource> source,
- int refresh,
- int request_id,
- chromeos::DBusMethodCallStatus call_status,
- bool is_tpm_token_ready) {
- if (call_status != chromeos::DBUS_METHOD_CALL_SUCCESS)
- is_tpm_token_ready = false;
-
- chromeos::CryptohomeLibrary* cryptohome =
- chromeos::CrosLibrary::Get()->GetCryptohomeLibrary();
- std::string output;
- AppendHeader(&output, refresh, "About Cryptohome");
- AppendBody(&output);
- AppendRefresh(&output, refresh, "cryptohome");
+class CryptohomeDataRequest : public base::RefCounted<CryptohomeDataRequest> {
stevenjb 2012/07/12 15:32:02 This seems like it belongs in its own file, not ab
+ public:
+ CryptohomeDataRequest(scoped_refptr<AboutUIHTMLSource> source,
+ const std::string& query,
+ int request_id)
+ : source_(source),
+ query_(query),
+ request_id_(request_id),
+ num_pending_values_(0),
+ is_mounted_(false),
+ tpm_is_ready_(false),
+ tpm_is_enabled_(false),
+ tpm_is_owned_(false),
+ tpm_is_being_owned_(false),
+ is_tpm_token_ready_(false) {
+ }
- output.append("<h3>CryptohomeLibrary:</h3>");
- output.append("<table>");
- output.append(AddBoolRow("IsMounted", cryptohome->IsMounted()));
- output.append(AddBoolRow("TpmIsReady", cryptohome->TpmIsReady()));
- output.append(AddBoolRow("TpmIsEnabled", cryptohome->TpmIsEnabled()));
- output.append(AddBoolRow("TpmIsOwned", cryptohome->TpmIsOwned()));
- output.append(AddBoolRow("TpmIsBeingOwned", cryptohome->TpmIsBeingOwned()));
- output.append(AddBoolRow("Pkcs11IsTpmTokenReady", is_tpm_token_ready));
- output.append("</table>");
+ // Starts asynchronous value fetching to finish data request.
+ void Start() {
+ // Request bool values asynchronously.
+ RequestBoolProperty(&chromeos::CryptohomeClient::TpmIsReady,
+ &tpm_is_ready_);
+ RequestBoolProperty(&chromeos::CryptohomeClient::Pkcs11IsTpmTokenReady,
+ &is_tpm_token_ready_);
+
+ // TODO(hashimoto): Get these values asynchronously. crbug.com/126674
stevenjb 2012/07/12 15:32:02 We could, however, wait to move this until address
hashimoto 2012/07/13 04:27:21 Yes, let's fix crbug.com/126674 first.
+ chromeos::CryptohomeLibrary* cryptohome_library =
+ chromeos::CrosLibrary::Get()->GetCryptohomeLibrary();
+ is_mounted_ = cryptohome_library->IsMounted();
+ tpm_is_enabled_ = cryptohome_library->TpmIsEnabled();
+ tpm_is_owned_ = cryptohome_library->TpmIsOwned();
+ tpm_is_being_owned_ = cryptohome_library->TpmIsBeingOwned();
+ }
- output.append("<h3>crypto:</h3>");
- output.append("<table>");
- output.append(AddBoolRow("IsTPMTokenReady", crypto::IsTPMTokenReady()));
- std::string token_name, user_pin;
- if (crypto::IsTPMTokenReady())
- crypto::GetTPMTokenInfo(&token_name, &user_pin);
- output.append(AddStringRow("token_name", token_name));
- output.append(AddStringRow("user_pin", std::string(user_pin.length(), '*')));
- output.append("</table>");
- AppendFooter(&output);
+ private:
+ // Member function pointer to CryptohomeClient's bool value getter.
+ typedef void (chromeos::CryptohomeClient::*CryptohomeBoolGetterMethod)(
+ const chromeos::CryptohomeClient::BoolMethodCallback&);
stevenjb 2012/07/12 15:32:02 This is extremely difficult to read/parse. I don't
hashimoto 2012/07/13 04:27:21 Agree, member-function-pointer and operator '->*'
+
+ ~CryptohomeDataRequest() {}
+
+ // Requests Cryptohome's bool property. OnBoolValueReceived will be called.
+ void RequestBoolProperty(CryptohomeBoolGetterMethod getter,
+ bool* destination) {
+ ++num_pending_values_;
+ (chromeos::DBusThreadManager::Get()->GetCryptohomeClient()->*getter)(
+ base::Bind(&CryptohomeDataRequest::OnBoolValueReceived,
+ this,
+ destination));
stevenjb 2012/07/12 15:32:02 Also very confusing.
+ }
- source->FinishDataRequest(output, request_id);
-}
+ // Called when a bool property is received. This method finishes data request
+ // when there is no pending values to be received.
+ void OnBoolValueReceived(bool* destination,
+ chromeos::DBusMethodCallStatus call_status,
+ bool value) {
+ if (call_status == chromeos::DBUS_METHOD_CALL_SUCCESS)
+ *destination = value;
+ if (--num_pending_values_ == 0)
+ Finish();
+ }
-void FinishCryptohomeDataRequest(scoped_refptr<AboutUIHTMLSource> source,
- const std::string& query,
- int request_id) {
- int refresh;
- base::StringToInt(query, &refresh);
+ // Finishes data request.
+ void Finish() {
+ int refresh = 0;
+ base::StringToInt(query_, &refresh);
+
+ std::string output;
+ AppendHeader(&output, refresh, "About Cryptohome");
+ AppendBody(&output);
+ AppendRefresh(&output, refresh, "cryptohome");
+
+ output.append("<h3>CryptohomeLibrary:</h3>");
+ output.append("<table>");
+ output.append(AddBoolRow("IsMounted", is_mounted_));
+ output.append(AddBoolRow("TpmIsReady", tpm_is_ready_));
+ output.append(AddBoolRow("TpmIsEnabled", tpm_is_enabled_));
+ output.append(AddBoolRow("TpmIsOwned", tpm_is_owned_));
+ output.append(AddBoolRow("TpmIsBeingOwned", tpm_is_being_owned_));
+ output.append(AddBoolRow("Pkcs11IsTpmTokenReady", is_tpm_token_ready_));
+ output.append("</table>");
+
+ output.append("<h3>crypto:</h3>");
+ output.append("<table>");
+ output.append(AddBoolRow("IsTPMTokenReady", crypto::IsTPMTokenReady()));
+ std::string token_name, user_pin;
+ if (crypto::IsTPMTokenReady())
+ crypto::GetTPMTokenInfo(&token_name, &user_pin);
+ output.append(AddStringRow("token_name", token_name));
+ output.append(
+ AddStringRow("user_pin", std::string(user_pin.length(), '*')));
+ output.append("</table>");
+ AppendFooter(&output);
- chromeos::DBusThreadManager::Get()->GetCryptohomeClient()->
- Pkcs11IsTpmTokenReady(base::Bind(&FinishCryptohomeDataRequestInternal,
- source,
- refresh,
- request_id));
-}
+ source_->FinishDataRequest(output, request_id_);
+ }
+
+ // Data request parameters.
+ scoped_refptr<AboutUIHTMLSource> source_;
+ std::string query_;
+ int request_id_;
+
+ // Number of pending values to be received.
+ int num_pending_values_;
+
+ // Bool values to be appended to the output.
+ bool is_mounted_;
+ bool tpm_is_ready_;
+ bool tpm_is_enabled_;
+ bool tpm_is_owned_;
+ bool tpm_is_being_owned_;
+ bool is_tpm_token_ready_;
+
+ friend class base::RefCounted<CryptohomeDataRequest>;
+};
std::string AboutDiscardsRun() {
std::string output;
@@ -1394,7 +1457,9 @@ void AboutUIHTMLSource::StartDataRequest(const std::string& path,
idr, ui::SCALE_FACTOR_NONE).as_string();
#if defined(OS_CHROMEOS)
} else if (host == chrome::kChromeUICryptohomeHost) {
- FinishCryptohomeDataRequest(this, path, request_id);
+ scoped_refptr<CryptohomeDataRequest> request(
+ new CryptohomeDataRequest(this, path, request_id));
+ request->Start();
return;
} else if (host == chrome::kChromeUIDiscardsHost) {
response = AboutDiscards(path);
« no previous file with comments | « chrome/browser/chromeos/login/tpm_password_fetcher.cc ('k') | chromeos/dbus/cryptohome_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698