OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/chromeos/cryptohome_web_ui_handler.h" | 5 #include "chrome/browser/ui/webui/chromeos/cryptohome_web_ui_handler.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "chromeos/dbus/cryptohome_client.h" | 9 #include "chromeos/dbus/cryptohome_client.h" |
10 #include "chromeos/dbus/dbus_thread_manager.h" | 10 #include "chromeos/dbus/dbus_thread_manager.h" |
11 #include "content/public/browser/browser_thread.h" | 11 #include "content/public/browser/browser_thread.h" |
12 #include "content/public/browser/web_ui.h" | 12 #include "content/public/browser/web_ui.h" |
13 #include "crypto/nss_util.h" | 13 #include "crypto/nss_util.h" |
14 | 14 |
15 using content::BrowserThread; | 15 using content::BrowserThread; |
16 | 16 |
17 namespace { | |
18 void GetNSSUtilInfoOnIOThread(const base::Callback< | |
19 void(bool, const std::string&, const std::string&)>& ui_callback) { | |
20 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
21 | |
22 bool is_tpm_ready = crypto::IsTPMTokenReady(); | |
23 std::string token_name; | |
24 std::string user_pin; | |
25 if (is_tpm_ready) | |
26 crypto::GetTPMTokenInfo(&token_name, &user_pin); | |
27 | |
28 BrowserThread::PostTask( | |
29 BrowserThread::UI, | |
30 FROM_HERE, | |
31 base::Bind(ui_callback, is_tpm_ready, token_name, user_pin)); | |
32 } | |
33 } // namespace | |
34 | |
35 namespace chromeos { | 17 namespace chromeos { |
36 | 18 |
37 CryptohomeWebUIHandler::CryptohomeWebUIHandler() : weak_ptr_factory_(this) {} | 19 CryptohomeWebUIHandler::CryptohomeWebUIHandler() : weak_ptr_factory_(this) {} |
38 | 20 |
39 CryptohomeWebUIHandler::~CryptohomeWebUIHandler() {} | 21 CryptohomeWebUIHandler::~CryptohomeWebUIHandler() {} |
40 | 22 |
41 void CryptohomeWebUIHandler::RegisterMessages() { | 23 void CryptohomeWebUIHandler::RegisterMessages() { |
42 web_ui()->RegisterMessageCallback( | 24 web_ui()->RegisterMessageCallback( |
43 "pageLoaded", | 25 "pageLoaded", |
44 base::Bind(&CryptohomeWebUIHandler::OnPageLoaded, | 26 base::Bind(&CryptohomeWebUIHandler::OnPageLoaded, |
45 weak_ptr_factory_.GetWeakPtr())); | 27 weak_ptr_factory_.GetWeakPtr())); |
46 } | 28 } |
47 | 29 |
48 void CryptohomeWebUIHandler::OnPageLoaded(const base::ListValue* args) { | 30 void CryptohomeWebUIHandler::OnPageLoaded(const base::ListValue* args) { |
49 CryptohomeClient* cryptohome_client = | 31 CryptohomeClient* cryptohome_client = |
50 DBusThreadManager::Get()->GetCryptohomeClient(); | 32 DBusThreadManager::Get()->GetCryptohomeClient(); |
51 | 33 |
52 cryptohome_client->IsMounted(GetCryptohomeBoolCallback("is-mounted")); | 34 cryptohome_client->IsMounted(GetCryptohomeBoolCallback("is-mounted")); |
53 cryptohome_client->TpmIsReady(GetCryptohomeBoolCallback("tpm-is-ready")); | 35 cryptohome_client->TpmIsReady(GetCryptohomeBoolCallback("tpm-is-ready")); |
54 cryptohome_client->TpmIsEnabled(GetCryptohomeBoolCallback("tpm-is-enabled")); | 36 cryptohome_client->TpmIsEnabled(GetCryptohomeBoolCallback("tpm-is-enabled")); |
55 cryptohome_client->TpmIsOwned(GetCryptohomeBoolCallback("tpm-is-owned")); | 37 cryptohome_client->TpmIsOwned(GetCryptohomeBoolCallback("tpm-is-owned")); |
56 cryptohome_client->TpmIsBeingOwned( | 38 cryptohome_client->TpmIsBeingOwned( |
57 GetCryptohomeBoolCallback("tpm-is-being-owned")); | 39 GetCryptohomeBoolCallback("tpm-is-being-owned")); |
58 cryptohome_client->Pkcs11IsTpmTokenReady( | 40 cryptohome_client->Pkcs11IsTpmTokenReady( |
59 GetCryptohomeBoolCallback("pkcs11-is-tpm-token-ready")); | 41 GetCryptohomeBoolCallback("pkcs11-is-tpm-token-ready")); |
60 | 42 |
61 BrowserThread::PostTask( | 43 BrowserThread::PostTaskAndReplyWithResult( |
62 BrowserThread::IO, | 44 BrowserThread::IO, |
63 FROM_HERE, | 45 FROM_HERE, |
64 base::Bind( | 46 base::Bind(&crypto::IsTPMTokenReady), |
65 &GetNSSUtilInfoOnIOThread, | 47 base::Bind(&CryptohomeWebUIHandler::DidGetNSSUtilInfoOnUIThread, |
66 base::Bind(&CryptohomeWebUIHandler::DidGetNSSUtilInfoOnUIThread, | 48 weak_ptr_factory_.GetWeakPtr())); |
67 weak_ptr_factory_.GetWeakPtr()))); | |
68 } | 49 } |
69 | 50 |
70 void CryptohomeWebUIHandler::DidGetNSSUtilInfoOnUIThread( | 51 void CryptohomeWebUIHandler::DidGetNSSUtilInfoOnUIThread( |
71 bool is_tpm_token_ready, | 52 bool is_tpm_token_ready) { |
72 const std::string& token_name, | |
73 const std::string& user_pin) { | |
74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 53 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
75 | 54 |
76 base::FundamentalValue is_tpm_token_ready_value(is_tpm_token_ready); | 55 base::FundamentalValue is_tpm_token_ready_value(is_tpm_token_ready); |
77 SetCryptohomeProperty("is-tpm-token-ready", is_tpm_token_ready_value); | 56 SetCryptohomeProperty("is-tpm-token-ready", is_tpm_token_ready_value); |
78 | |
79 if (is_tpm_token_ready) { | |
80 base::StringValue token_name_value(token_name); | |
81 SetCryptohomeProperty("token-name", token_name_value); | |
82 // Hide user_pin. | |
83 base::StringValue user_pin_value(std::string(user_pin.length(), '*')); | |
84 SetCryptohomeProperty("user-pin", user_pin_value); | |
85 } | |
86 } | 57 } |
87 | 58 |
88 BoolDBusMethodCallback CryptohomeWebUIHandler::GetCryptohomeBoolCallback( | 59 BoolDBusMethodCallback CryptohomeWebUIHandler::GetCryptohomeBoolCallback( |
89 const std::string& destination_id) { | 60 const std::string& destination_id) { |
90 return base::Bind(&CryptohomeWebUIHandler::OnCryptohomeBoolProperty, | 61 return base::Bind(&CryptohomeWebUIHandler::OnCryptohomeBoolProperty, |
91 weak_ptr_factory_.GetWeakPtr(), | 62 weak_ptr_factory_.GetWeakPtr(), |
92 destination_id); | 63 destination_id); |
93 } | 64 } |
94 | 65 |
95 void CryptohomeWebUIHandler::OnCryptohomeBoolProperty( | 66 void CryptohomeWebUIHandler::OnCryptohomeBoolProperty( |
96 const std::string& destination_id, | 67 const std::string& destination_id, |
97 DBusMethodCallStatus call_status, | 68 DBusMethodCallStatus call_status, |
98 bool value) { | 69 bool value) { |
99 if (call_status != DBUS_METHOD_CALL_SUCCESS) | 70 if (call_status != DBUS_METHOD_CALL_SUCCESS) |
100 value = false; | 71 value = false; |
101 base::FundamentalValue fundamental_value(value); | 72 base::FundamentalValue fundamental_value(value); |
102 SetCryptohomeProperty(destination_id, fundamental_value); | 73 SetCryptohomeProperty(destination_id, fundamental_value); |
103 } | 74 } |
104 | 75 |
105 void CryptohomeWebUIHandler::SetCryptohomeProperty( | 76 void CryptohomeWebUIHandler::SetCryptohomeProperty( |
106 const std::string& destination_id, | 77 const std::string& destination_id, |
107 const base::Value& value) { | 78 const base::Value& value) { |
108 base::StringValue destination_id_value(destination_id); | 79 base::StringValue destination_id_value(destination_id); |
109 web_ui()->CallJavascriptFunction( | 80 web_ui()->CallJavascriptFunction( |
110 "SetCryptohomeProperty", destination_id_value, value); | 81 "SetCryptohomeProperty", destination_id_value, value); |
111 } | 82 } |
112 | 83 |
113 } // namespace chromeos | 84 } // namespace chromeos |
OLD | NEW |