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

use AttestationClient to delete keys for removing browsing data

We are deprecating attestation methods by CryptohomeClient.

BUG=b:158955123
TEST=unit_tests.

Change-Id: I0a4761f41efb4f4a904933e1177431615c19d036
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2497388
Commit-Queue: Leo Lai <cylai@google.com>
Reviewed-by: default avatarMartin Šrámek <msramek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821221}
parent 66ff9178
......@@ -2326,6 +2326,8 @@ static_library("browser") {
"//chromeos/components/quick_answers/public/cpp:prefs",
"//chromeos/components/scanning",
"//chromeos/components/scanning/mojom",
"//chromeos/dbus/attestation",
"//chromeos/dbus/attestation:attestation_proto",
"//chromeos/dbus/cryptohome",
"//chromeos/dbus/power",
"//chromeos/services/device_sync/public/cpp:prefs",
......
......@@ -157,8 +157,9 @@
#include "chrome/browser/chromeos/policy/system_proxy_manager.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chromeos/cryptohome/cryptohome_parameters.h"
#include "chromeos/dbus/attestation/attestation_client.h"
#include "chromeos/dbus/attestation/interface.pb.h"
#include "chromeos/dbus/constants/attestation_constants.h"
#include "chromeos/dbus/cryptohome/cryptohome_client.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "components/user_manager/user.h"
#endif // defined(OS_CHROMEOS)
......@@ -1062,16 +1063,27 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
if (!user) {
LOG(WARNING) << "Failed to find user for current profile.";
} else {
chromeos::CryptohomeClient::Get()->TpmAttestationDeleteKeysByPrefix(
chromeos::attestation::KEY_USER,
cryptohome::CreateAccountIdentifierFromAccountId(
user->GetAccountId()),
chromeos::attestation::kContentProtectionKeyPrefix,
base::BindOnce(
&ChromeBrowsingDataRemoverDelegate::OnClearPlatformKeys,
weak_ptr_factory_.GetWeakPtr(),
CreateTaskCompletionClosure(
TracingDataType::kTpmAttestationKeys)));
::attestation::DeleteKeysRequest request;
request.set_username(cryptohome::CreateAccountIdentifierFromAccountId(
user->GetAccountId())
.account_id());
request.set_key_label_match(
chromeos::attestation::kContentProtectionKeyPrefix);
request.set_match_behavior(
::attestation::DeleteKeysRequest::MATCH_BEHAVIOR_PREFIX);
auto callback = base::BindOnce(
&ChromeBrowsingDataRemoverDelegate::OnClearPlatformKeys,
weak_ptr_factory_.GetWeakPtr(),
CreateTaskCompletionClosure(TracingDataType::kTpmAttestationKeys));
chromeos::AttestationClient::Get()->DeleteKeys(
request, base::BindOnce(
[](decltype(callback) cb,
const ::attestation::DeleteKeysReply& reply) {
std::move(cb).Run(reply.status() ==
::attestation::STATUS_SUCCESS);
},
std::move(callback)));
}
}
#endif // defined(OS_CHROMEOS)
......@@ -1281,9 +1293,8 @@ bool ChromeBrowsingDataRemoverDelegate::IsForAllTime() const {
#if defined(OS_CHROMEOS)
void ChromeBrowsingDataRemoverDelegate::OnClearPlatformKeys(
base::OnceClosure done,
base::Optional<bool> result) {
LOG_IF(ERROR, !result.has_value() || !result.value())
<< "Failed to clear platform keys.";
bool result) {
LOG_IF(ERROR, !result) << "Failed to clear platform keys.";
std::move(done).Run();
}
#endif
......@@ -277,7 +277,7 @@ class ChromeBrowsingDataRemoverDelegate
bool IsForAllTime() const;
#if defined(OS_CHROMEOS)
void OnClearPlatformKeys(base::OnceClosure done, base::Optional<bool> result);
void OnClearPlatformKeys(base::OnceClosure done, bool);
#endif
#if BUILDFLAG(ENABLE_PLUGINS)
......
......@@ -143,7 +143,7 @@
#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/login/users/mock_user_manager.h"
#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h"
#include "chromeos/dbus/attestation/fake_attestation_client.h"
#include "components/account_id/account_id.h"
#include "components/user_manager/scoped_user_manager.h"
#endif // defined(OS_CHROMEOS)
......@@ -272,27 +272,6 @@ class TestSearchEngineDelegate
};
#endif
#if defined(OS_CHROMEOS)
// Customized fake class to count TpmAttestationDeleteKeys call.
class FakeCryptohomeClient : public chromeos::FakeCryptohomeClient {
public:
void TpmAttestationDeleteKeysByPrefix(
chromeos::attestation::AttestationKeyType key_type,
const cryptohome::AccountIdentifier& cryptohome_id,
const std::string& key_prefix,
chromeos::DBusMethodCallback<bool> callback) override {
++delete_keys_call_count_;
chromeos::FakeCryptohomeClient::TpmAttestationDeleteKeysByPrefix(
key_type, cryptohome_id, key_prefix, std::move(callback));
}
int delete_keys_call_count() const { return delete_keys_call_count_; }
private:
int delete_keys_call_count_ = 0;
};
#endif
class RemoveCookieTester {
public:
RemoveCookieTester() {}
......@@ -1766,19 +1745,18 @@ TEST_F(ChromeBrowsingDataRemoverDelegateTest,
user_manager::ScopedUserManager user_manager_enabler(
base::WrapUnique(mock_user_manager));
// Creates a derived fake global instance destroyed in
// CryptohomeClient::Shutdown().
auto* cryptohome_client = new FakeCryptohomeClient();
chromeos::AttestationClient::InitializeFake();
BlockUntilBrowsingDataRemoved(
base::Time(), base::Time::Max(),
content::BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES, false);
// Expect exactly one call. No calls means no attempt to delete keys and more
// than one call means a significant performance problem.
EXPECT_EQ(1, cryptohome_client->delete_keys_call_count());
const std::vector<::attestation::DeleteKeysRequest>& history =
chromeos::AttestationClient::Get()
->GetTestInterface()
->delete_keys_history();
EXPECT_EQ(history.size(), 1);
chromeos::CryptohomeClient::Shutdown();
chromeos::AttestationClient::Shutdown();
}
#endif
......
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