• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/ui/webui/chromeos/cryptohome_web_ui_handler.h"
6 
7 #include "base/bind.h"
8 #include "base/values.h"
9 #include "chromeos/dbus/cryptohome_client.h"
10 #include "chromeos/dbus/dbus_thread_manager.h"
11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/web_ui.h"
13 #include "crypto/nss_util.h"
14 
15 using content::BrowserThread;
16 
17 namespace chromeos {
18 
CryptohomeWebUIHandler()19 CryptohomeWebUIHandler::CryptohomeWebUIHandler() : weak_ptr_factory_(this) {}
20 
~CryptohomeWebUIHandler()21 CryptohomeWebUIHandler::~CryptohomeWebUIHandler() {}
22 
RegisterMessages()23 void CryptohomeWebUIHandler::RegisterMessages() {
24   web_ui()->RegisterMessageCallback(
25       "pageLoaded",
26       base::Bind(&CryptohomeWebUIHandler::OnPageLoaded,
27                  weak_ptr_factory_.GetWeakPtr()));
28 }
29 
OnPageLoaded(const base::ListValue * args)30 void CryptohomeWebUIHandler::OnPageLoaded(const base::ListValue* args) {
31   CryptohomeClient* cryptohome_client =
32       DBusThreadManager::Get()->GetCryptohomeClient();
33 
34   cryptohome_client->IsMounted(GetCryptohomeBoolCallback("is-mounted"));
35   cryptohome_client->TpmIsReady(GetCryptohomeBoolCallback("tpm-is-ready"));
36   cryptohome_client->TpmIsEnabled(GetCryptohomeBoolCallback("tpm-is-enabled"));
37   cryptohome_client->TpmIsOwned(GetCryptohomeBoolCallback("tpm-is-owned"));
38   cryptohome_client->TpmIsBeingOwned(
39       GetCryptohomeBoolCallback("tpm-is-being-owned"));
40   cryptohome_client->Pkcs11IsTpmTokenReady(
41       GetCryptohomeBoolCallback("pkcs11-is-tpm-token-ready"));
42 
43   BrowserThread::PostTaskAndReplyWithResult(
44       BrowserThread::IO,
45       FROM_HERE,
46       base::Bind(&crypto::IsTPMTokenReady, base::Closure()),
47       base::Bind(&CryptohomeWebUIHandler::DidGetNSSUtilInfoOnUIThread,
48                  weak_ptr_factory_.GetWeakPtr()));
49 }
50 
DidGetNSSUtilInfoOnUIThread(bool is_tpm_token_ready)51 void CryptohomeWebUIHandler::DidGetNSSUtilInfoOnUIThread(
52     bool is_tpm_token_ready) {
53   DCHECK_CURRENTLY_ON(BrowserThread::UI);
54 
55   base::FundamentalValue is_tpm_token_ready_value(is_tpm_token_ready);
56   SetCryptohomeProperty("is-tpm-token-ready", is_tpm_token_ready_value);
57 }
58 
GetCryptohomeBoolCallback(const std::string & destination_id)59 BoolDBusMethodCallback CryptohomeWebUIHandler::GetCryptohomeBoolCallback(
60     const std::string& destination_id) {
61   return base::Bind(&CryptohomeWebUIHandler::OnCryptohomeBoolProperty,
62                     weak_ptr_factory_.GetWeakPtr(),
63                     destination_id);
64 }
65 
OnCryptohomeBoolProperty(const std::string & destination_id,DBusMethodCallStatus call_status,bool value)66 void CryptohomeWebUIHandler::OnCryptohomeBoolProperty(
67     const std::string& destination_id,
68     DBusMethodCallStatus call_status,
69     bool value) {
70   if (call_status != DBUS_METHOD_CALL_SUCCESS)
71     value = false;
72   base::FundamentalValue fundamental_value(value);
73   SetCryptohomeProperty(destination_id, fundamental_value);
74 }
75 
SetCryptohomeProperty(const std::string & destination_id,const base::Value & value)76 void CryptohomeWebUIHandler::SetCryptohomeProperty(
77     const std::string& destination_id,
78     const base::Value& value) {
79   base::StringValue destination_id_value(destination_id);
80   web_ui()->CallJavascriptFunction(
81       "SetCryptohomeProperty", destination_id_value, value);
82 }
83 
84 }  // namespace chromeos
85