Commit f892c95d authored by Leo Lai's avatar Leo Lai Committed by Commit Bot

use TpmManagerClient to get tpm version info.

We are deprecating tpm-related APIs by cryptohome.

To test this CL, it is attempted to filter out all the affected test
manually:
1. For browser test, device_status_collector_browsertest.cc is confirmed
working fine.
2. For unit test, the affected tests are searched by grepping
`DeviceStatusCollector` and as a result it is confirmed that with the
following filters all the tests pass:
*StatusUploader*
*DeviceCloudPolicy*
*AffiliatedSessionService*
*ManagementUIHandler*

BUG=b:172748724
TEST=build ok.
TEST=See above for the test items.

Change-Id: Ia41f23d3c2ba9666699bee82cf9c465d5c675159
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2557123
Commit-Queue: Leo Lai <cylai@google.com>
Reviewed-by: default avatarMaksim Ivanov <emaxx@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830882}
parent d9c7385b
...@@ -69,6 +69,8 @@ ...@@ -69,6 +69,8 @@
#include "chromeos/dbus/cryptohome/tpm_util.h" #include "chromeos/dbus/cryptohome/tpm_util.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager/idle.pb.h" #include "chromeos/dbus/power_manager/idle.pb.h"
#include "chromeos/dbus/tpm_manager/tpm_manager.pb.h"
#include "chromeos/dbus/tpm_manager/tpm_manager_client.h"
#include "chromeos/dbus/update_engine_client.h" #include "chromeos/dbus/update_engine_client.h"
#include "chromeos/dbus/util/version_loader.h" #include "chromeos/dbus/util/version_loader.h"
#include "chromeos/disks/disk_mount_manager.h" #include "chromeos/disks/disk_mount_manager.h"
...@@ -1484,8 +1486,10 @@ DeviceStatusCollector::DeviceStatusCollector( ...@@ -1484,8 +1486,10 @@ DeviceStatusCollector::DeviceStatusCollector(
base::BindOnce(&ReadFirmwareVersion), base::BindOnce(&ReadFirmwareVersion),
base::BindOnce(&DeviceStatusCollector::OnOSFirmware, base::BindOnce(&DeviceStatusCollector::OnOSFirmware,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
chromeos::tpm_util::GetTpmVersion(base::BindOnce( chromeos::TpmManagerClient::Get()->GetVersionInfo(
&DeviceStatusCollector::OnTpmVersion, weak_factory_.GetWeakPtr())); ::tpm_manager::GetVersionInfoRequest(),
base::BindOnce(&DeviceStatusCollector::OnGetTpmVersion,
weak_factory_.GetWeakPtr()));
pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>(); pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>();
pref_change_registrar_->Init(pref_service_); pref_change_registrar_->Init(pref_service_);
...@@ -2052,12 +2056,12 @@ bool DeviceStatusCollector::GetVersionInfo( ...@@ -2052,12 +2056,12 @@ bool DeviceStatusCollector::GetVersionInfo(
em::TpmVersionInfo* const tpm_version_info = em::TpmVersionInfo* const tpm_version_info =
status->mutable_tpm_version_info(); status->mutable_tpm_version_info();
tpm_version_info->set_family(tpm_version_info_.family); tpm_version_info->set_family(tpm_version_reply_.family());
tpm_version_info->set_spec_level(tpm_version_info_.spec_level); tpm_version_info->set_spec_level(tpm_version_reply_.spec_level());
tpm_version_info->set_manufacturer(tpm_version_info_.manufacturer); tpm_version_info->set_manufacturer(tpm_version_reply_.manufacturer());
tpm_version_info->set_tpm_model(tpm_version_info_.tpm_model); tpm_version_info->set_tpm_model(tpm_version_reply_.tpm_model());
tpm_version_info->set_firmware_version(tpm_version_info_.firmware_version); tpm_version_info->set_firmware_version(tpm_version_reply_.firmware_version());
tpm_version_info->set_vendor_specific(tpm_version_info_.vendor_specific); tpm_version_info->set_vendor_specific(tpm_version_reply_.vendor_specific());
return true; return true;
} }
...@@ -2708,9 +2712,12 @@ void DeviceStatusCollector::OnOSFirmware( ...@@ -2708,9 +2712,12 @@ void DeviceStatusCollector::OnOSFirmware(
firmware_fetch_error_ = version.second; firmware_fetch_error_ = version.second;
} }
void DeviceStatusCollector::OnTpmVersion( void DeviceStatusCollector::OnGetTpmVersion(
const chromeos::CryptohomeClient::TpmVersionInfo& tpm_version_info) { const ::tpm_manager::GetVersionInfoReply& reply) {
tpm_version_info_ = tpm_version_info; if (reply.status() != ::tpm_manager::STATUS_SUCCESS) {
LOG(WARNING) << "Failed to get tpm version; status: " << reply.status();
}
tpm_version_reply_ = reply;
} }
} // namespace policy } // namespace policy
...@@ -17,12 +17,12 @@ ...@@ -17,12 +17,12 @@
#include "base/callback_list.h" #include "base/callback_list.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/containers/circular_deque.h" #include "base/containers/circular_deque.h"
#include "base/time/default_clock.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h" #include "base/sequenced_task_runner.h"
#include "base/task/cancelable_task_tracker.h" #include "base/task/cancelable_task_tracker.h"
#include "base/time/default_clock.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "chrome/browser/chromeos/policy/status_collector/app_info_generator.h" #include "chrome/browser/chromeos/policy/status_collector/app_info_generator.h"
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h"
#include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/power/power_manager_client.h"
#include "chromeos/dbus/tpm_manager/tpm_manager.pb.h"
#include "chromeos/services/cros_healthd/public/mojom/cros_healthd.mojom.h" #include "chromeos/services/cros_healthd/public/mojom/cros_healthd.mojom.h"
#include "components/policy/proto/device_management_backend.pb.h" #include "components/policy/proto/device_management_backend.pb.h"
#include "components/prefs/pref_member.h" #include "components/prefs/pref_member.h"
...@@ -256,8 +257,9 @@ class DeviceStatusCollector : public StatusCollector, ...@@ -256,8 +257,9 @@ class DeviceStatusCollector : public StatusCollector,
// Callbacks from chromeos::VersionLoader. // Callbacks from chromeos::VersionLoader.
void OnOSVersion(const std::string& version); void OnOSVersion(const std::string& version);
void OnOSFirmware(std::pair<const std::string&, const std::string&> version); void OnOSFirmware(std::pair<const std::string&, const std::string&> version);
void OnTpmVersion(
const chromeos::CryptohomeClient::TpmVersionInfo& tpm_version_info); // Callbacks from `chromeos::TpmManagerClient`.
void OnGetTpmVersion(const ::tpm_manager::GetVersionInfoReply& reply);
void GetDeviceStatus(scoped_refptr<DeviceStatusCollectorState> state); void GetDeviceStatus(scoped_refptr<DeviceStatusCollectorState> state);
void GetSessionStatus(scoped_refptr<DeviceStatusCollectorState> state); void GetSessionStatus(scoped_refptr<DeviceStatusCollectorState> state);
...@@ -379,7 +381,7 @@ class DeviceStatusCollector : public StatusCollector, ...@@ -379,7 +381,7 @@ class DeviceStatusCollector : public StatusCollector,
std::string os_version_; std::string os_version_;
std::string firmware_version_; std::string firmware_version_;
std::string firmware_fetch_error_; std::string firmware_fetch_error_;
chromeos::CryptohomeClient::TpmVersionInfo tpm_version_info_; ::tpm_manager::GetVersionInfoReply tpm_version_reply_;
struct ResourceUsage { struct ResourceUsage {
// Sample of percentage-of-CPU-used. // Sample of percentage-of-CPU-used.
......
...@@ -66,6 +66,7 @@ ...@@ -66,6 +66,7 @@
#include "chromeos/dbus/shill/shill_ipconfig_client.h" #include "chromeos/dbus/shill/shill_ipconfig_client.h"
#include "chromeos/dbus/shill/shill_profile_client.h" #include "chromeos/dbus/shill/shill_profile_client.h"
#include "chromeos/dbus/shill/shill_service_client.h" #include "chromeos/dbus/shill/shill_service_client.h"
#include "chromeos/dbus/tpm_manager/tpm_manager_client.h"
#include "chromeos/dbus/vm_applications/apps.pb.h" #include "chromeos/dbus/vm_applications/apps.pb.h"
#include "chromeos/disks/disk_mount_manager.h" #include "chromeos/disks/disk_mount_manager.h"
#include "chromeos/disks/mock_disk_mount_manager.h" #include "chromeos/disks/mock_disk_mount_manager.h"
...@@ -798,11 +799,13 @@ class DeviceStatusCollectorTest : public testing::Test { ...@@ -798,11 +799,13 @@ class DeviceStatusCollectorTest : public testing::Test {
chromeos::CrasAudioHandler::InitializeForTesting(); chromeos::CrasAudioHandler::InitializeForTesting();
chromeos::CryptohomeClient::InitializeFake(); chromeos::CryptohomeClient::InitializeFake();
chromeos::PowerManagerClient::InitializeFake(); chromeos::PowerManagerClient::InitializeFake();
chromeos::TpmManagerClient::InitializeFake();
chromeos::LoginState::Initialize(); chromeos::LoginState::Initialize();
} }
~DeviceStatusCollectorTest() override { ~DeviceStatusCollectorTest() override {
chromeos::LoginState::Shutdown(); chromeos::LoginState::Shutdown();
chromeos::TpmManagerClient::Shutdown();
chromeos::PowerManagerClient::Shutdown(); chromeos::PowerManagerClient::Shutdown();
chromeos::CryptohomeClient::Shutdown(); chromeos::CryptohomeClient::Shutdown();
chromeos::CrasAudioHandler::Shutdown(); chromeos::CrasAudioHandler::Shutdown();
...@@ -1529,6 +1532,24 @@ TEST_F(DeviceStatusCollectorTest, VersionInfo) { ...@@ -1529,6 +1532,24 @@ TEST_F(DeviceStatusCollectorTest, VersionInfo) {
EXPECT_TRUE(device_status_.has_firmware_version()); EXPECT_TRUE(device_status_.has_firmware_version());
EXPECT_TRUE(device_status_.has_tpm_version_info()); EXPECT_TRUE(device_status_.has_tpm_version_info());
// Expect tpm version info is still set (with an empty one) regardless of
// D-Bus error.
chromeos::TpmManagerClient::Get()
->GetTestInterface()
->mutable_version_info_reply()
->set_status(::tpm_manager::STATUS_DBUS_ERROR);
GetStatus();
EXPECT_TRUE(device_status_.has_browser_version());
EXPECT_TRUE(device_status_.has_channel());
EXPECT_TRUE(device_status_.has_os_version());
EXPECT_TRUE(device_status_.has_firmware_version());
EXPECT_TRUE(device_status_.has_tpm_version_info());
// Reset the version info reply just in case the rest of tests get affected.
chromeos::TpmManagerClient::Get()
->GetTestInterface()
->mutable_version_info_reply()
->clear_status();
// When the pref to collect this data is not enabled, expect that none of // When the pref to collect this data is not enabled, expect that none of
// the fields are present in the protobuf. // the fields are present in the protobuf.
scoped_testing_cros_settings_.device_settings()->SetBoolean( scoped_testing_cros_settings_.device_settings()->SetBoolean(
......
...@@ -17,8 +17,10 @@ ...@@ -17,8 +17,10 @@
#include "chrome/browser/chromeos/policy/status_collector/device_status_collector.h" #include "chrome/browser/chromeos/policy/status_collector/device_status_collector.h"
#include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h" #include "chrome/browser/chromeos/settings/scoped_testing_cros_settings.h"
#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
#include "chromeos/dbus/cryptohome/cryptohome_client.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/power/power_manager_client.h"
#include "chromeos/dbus/tpm_manager/tpm_manager_client.h"
#include "chromeos/settings/cros_settings_names.h" #include "chromeos/settings/cros_settings_names.h"
#include "components/policy/core/common/cloud/cloud_policy_client.h" #include "components/policy/core/common/cloud/cloud_policy_client.h"
#include "components/policy/core/common/cloud/mock_cloud_policy_client.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h"
...@@ -85,6 +87,7 @@ class StatusUploaderTest : public testing::Test { ...@@ -85,6 +87,7 @@ class StatusUploaderTest : public testing::Test {
chromeos::CryptohomeClient::InitializeFake(); chromeos::CryptohomeClient::InitializeFake();
chromeos::PowerManagerClient::InitializeFake(); chromeos::PowerManagerClient::InitializeFake();
chromeos::TpmManagerClient::InitializeFake();
client_.SetDMToken("dm_token"); client_.SetDMToken("dm_token");
collector_.reset(new MockDeviceStatusCollector(&prefs_)); collector_.reset(new MockDeviceStatusCollector(&prefs_));
...@@ -95,6 +98,7 @@ class StatusUploaderTest : public testing::Test { ...@@ -95,6 +98,7 @@ class StatusUploaderTest : public testing::Test {
void TearDown() override { void TearDown() override {
content::RunAllTasksUntilIdle(); content::RunAllTasksUntilIdle();
chromeos::TpmManagerClient::Shutdown();
chromeos::PowerManagerClient::Shutdown(); chromeos::PowerManagerClient::Shutdown();
chromeos::CryptohomeClient::Shutdown(); chromeos::CryptohomeClient::Shutdown();
chromeos::DBusThreadManager::Shutdown(); chromeos::DBusThreadManager::Shutdown();
......
...@@ -12,8 +12,10 @@ ...@@ -12,8 +12,10 @@
#include "chrome/browser/chromeos/settings/device_settings_service.h" #include "chrome/browser/chromeos/settings/device_settings_service.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
#include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/cryptohome/cryptohome_parameters.h"
#include "chromeos/dbus/cryptohome/cryptohome_client.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/dbus/power/fake_power_manager_client.h"
#include "chromeos/dbus/tpm_manager/tpm_manager_client.h"
#include "components/ownership/mock_owner_key_util.h" #include "components/ownership/mock_owner_key_util.h"
#include "components/policy/proto/chrome_device_policy.pb.h" #include "components/policy/proto/chrome_device_policy.pb.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
...@@ -56,6 +58,7 @@ void DeviceSettingsTestBase::SetUp() { ...@@ -56,6 +58,7 @@ void DeviceSettingsTestBase::SetUp() {
dbus_setter_ = DBusThreadManager::GetSetterForTesting(); dbus_setter_ = DBusThreadManager::GetSetterForTesting();
CryptohomeClient::InitializeFake(); CryptohomeClient::InitializeFake();
PowerManagerClient::InitializeFake(); PowerManagerClient::InitializeFake();
TpmManagerClient::InitializeFake();
OwnerSettingsServiceChromeOSFactory::SetDeviceSettingsServiceForTesting( OwnerSettingsServiceChromeOSFactory::SetDeviceSettingsServiceForTesting(
device_settings_service_.get()); device_settings_service_.get());
OwnerSettingsServiceChromeOSFactory::GetInstance()->SetOwnerKeyUtilForTesting( OwnerSettingsServiceChromeOSFactory::GetInstance()->SetOwnerKeyUtilForTesting(
...@@ -79,6 +82,7 @@ void DeviceSettingsTestBase::TearDown() { ...@@ -79,6 +82,7 @@ void DeviceSettingsTestBase::TearDown() {
FlushDeviceSettings(); FlushDeviceSettings();
device_settings_service_->UnsetSessionManager(); device_settings_service_->UnsetSessionManager();
device_settings_service_.reset(); device_settings_service_.reset();
TpmManagerClient::Shutdown();
PowerManagerClient::Shutdown(); PowerManagerClient::Shutdown();
CryptohomeClient::Shutdown(); CryptohomeClient::Shutdown();
DBusThreadManager::Shutdown(); DBusThreadManager::Shutdown();
......
...@@ -4,9 +4,26 @@ ...@@ -4,9 +4,26 @@
#include "chromeos/dbus/tpm_manager/fake_tpm_manager_client.h" #include "chromeos/dbus/tpm_manager/fake_tpm_manager_client.h"
#include <utility>
#include "base/bind.h"
#include "base/location.h"
#include "base/notreached.h" #include "base/notreached.h"
#include "base/threading/thread_task_runner_handle.h"
namespace chromeos { namespace chromeos {
namespace {
// Posts `callback` on the current thread's task runner, passing it the
// `reply` message.
template <class ReplyType>
void PostProtoResponse(base::OnceCallback<void(const ReplyType&)> callback,
const ReplyType& reply) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), reply));
}
} // namespace
FakeTpmManagerClient::FakeTpmManagerClient() = default; FakeTpmManagerClient::FakeTpmManagerClient() = default;
...@@ -21,7 +38,7 @@ void FakeTpmManagerClient::GetTpmNonsensitiveStatus( ...@@ -21,7 +38,7 @@ void FakeTpmManagerClient::GetTpmNonsensitiveStatus(
void FakeTpmManagerClient::GetVersionInfo( void FakeTpmManagerClient::GetVersionInfo(
const ::tpm_manager::GetVersionInfoRequest& request, const ::tpm_manager::GetVersionInfoRequest& request,
GetVersionInfoCallback callback) { GetVersionInfoCallback callback) {
NOTIMPLEMENTED(); PostProtoResponse(std::move(callback), version_info_reply_);
} }
void FakeTpmManagerClient::GetDictionaryAttackInfo( void FakeTpmManagerClient::GetDictionaryAttackInfo(
...@@ -42,4 +59,13 @@ void FakeTpmManagerClient::ClearStoredOwnerPassword( ...@@ -42,4 +59,13 @@ void FakeTpmManagerClient::ClearStoredOwnerPassword(
NOTIMPLEMENTED(); NOTIMPLEMENTED();
} }
TpmManagerClient::TestInterface* FakeTpmManagerClient::GetTestInterface() {
return this;
}
::tpm_manager::GetVersionInfoReply*
FakeTpmManagerClient::mutable_version_info_reply() {
return &version_info_reply_;
}
} // namespace chromeos } // namespace chromeos
...@@ -13,7 +13,8 @@ ...@@ -13,7 +13,8 @@
namespace chromeos { namespace chromeos {
class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) FakeTpmManagerClient class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) FakeTpmManagerClient
: public TpmManagerClient { : public TpmManagerClient,
public TpmManagerClient::TestInterface {
public: public:
FakeTpmManagerClient(); FakeTpmManagerClient();
~FakeTpmManagerClient() override; ~FakeTpmManagerClient() override;
...@@ -38,6 +39,14 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) FakeTpmManagerClient ...@@ -38,6 +39,14 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) FakeTpmManagerClient
void ClearStoredOwnerPassword( void ClearStoredOwnerPassword(
const ::tpm_manager::ClearStoredOwnerPasswordRequest& request, const ::tpm_manager::ClearStoredOwnerPasswordRequest& request,
ClearStoredOwnerPasswordCallback callback) override; ClearStoredOwnerPasswordCallback callback) override;
TpmManagerClient::TestInterface* GetTestInterface() override;
// TpmManagerClient::TestInterface:
::tpm_manager::GetVersionInfoReply* mutable_version_info_reply() override;
private:
::tpm_manager::GetVersionInfoReply version_info_reply_;
}; };
} // namespace chromeos } // namespace chromeos
......
...@@ -103,6 +103,8 @@ class TpmManagerClientImpl : public TpmManagerClient { ...@@ -103,6 +103,8 @@ class TpmManagerClientImpl : public TpmManagerClient {
} }
private: private:
TestInterface* GetTestInterface() override { return nullptr; }
// Calls tpm_managerd's |method_name| method, passing in |request| as input // Calls tpm_managerd's |method_name| method, passing in |request| as input
// with |timeout_ms|. Once the (asynchronous) call finishes, |callback| is // with |timeout_ms|. Once the (asynchronous) call finishes, |callback| is
// called with the response proto. // called with the response proto.
......
...@@ -34,6 +34,15 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) TpmManagerClient { ...@@ -34,6 +34,15 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) TpmManagerClient {
using ClearStoredOwnerPasswordCallback = base::OnceCallback<void( using ClearStoredOwnerPasswordCallback = base::OnceCallback<void(
const ::tpm_manager::ClearStoredOwnerPasswordReply&)>; const ::tpm_manager::ClearStoredOwnerPasswordReply&)>;
// Interface with testing functionality. Accessed through GetTestInterface(),
// only implemented in the fake implementation.
class TestInterface {
public:
// Gets a mutable reply that is returned when `GetVersionInfo()` is called.
virtual ::tpm_manager::GetVersionInfoReply*
mutable_version_info_reply() = 0;
};
// Not copyable or movable. // Not copyable or movable.
TpmManagerClient(const TpmManagerClient&) = delete; TpmManagerClient(const TpmManagerClient&) = delete;
TpmManagerClient& operator=(const TpmManagerClient&) = delete; TpmManagerClient& operator=(const TpmManagerClient&) = delete;
...@@ -80,6 +89,9 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) TpmManagerClient { ...@@ -80,6 +89,9 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) TpmManagerClient {
const ::tpm_manager::ClearStoredOwnerPasswordRequest& request, const ::tpm_manager::ClearStoredOwnerPasswordRequest& request,
ClearStoredOwnerPasswordCallback callback) = 0; ClearStoredOwnerPasswordCallback callback) = 0;
// Returns an interface for testing (fake only), or returns nullptr.
virtual TestInterface* GetTestInterface() = 0;
protected: protected:
// Initialize/Shutdown should be used instead. // Initialize/Shutdown should be used instead.
TpmManagerClient(); TpmManagerClient();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment