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") { ...@@ -2326,6 +2326,8 @@ static_library("browser") {
"//chromeos/components/quick_answers/public/cpp:prefs", "//chromeos/components/quick_answers/public/cpp:prefs",
"//chromeos/components/scanning", "//chromeos/components/scanning",
"//chromeos/components/scanning/mojom", "//chromeos/components/scanning/mojom",
"//chromeos/dbus/attestation",
"//chromeos/dbus/attestation:attestation_proto",
"//chromeos/dbus/cryptohome", "//chromeos/dbus/cryptohome",
"//chromeos/dbus/power", "//chromeos/dbus/power",
"//chromeos/services/device_sync/public/cpp:prefs", "//chromeos/services/device_sync/public/cpp:prefs",
......
...@@ -157,8 +157,9 @@ ...@@ -157,8 +157,9 @@
#include "chrome/browser/chromeos/policy/system_proxy_manager.h" #include "chrome/browser/chromeos/policy/system_proxy_manager.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chromeos/cryptohome/cryptohome_parameters.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/constants/attestation_constants.h"
#include "chromeos/dbus/cryptohome/cryptohome_client.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "components/user_manager/user.h" #include "components/user_manager/user.h"
#endif // defined(OS_CHROMEOS) #endif // defined(OS_CHROMEOS)
...@@ -1062,16 +1063,27 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData( ...@@ -1062,16 +1063,27 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
if (!user) { if (!user) {
LOG(WARNING) << "Failed to find user for current profile."; LOG(WARNING) << "Failed to find user for current profile.";
} else { } else {
chromeos::CryptohomeClient::Get()->TpmAttestationDeleteKeysByPrefix( ::attestation::DeleteKeysRequest request;
chromeos::attestation::KEY_USER, request.set_username(cryptohome::CreateAccountIdentifierFromAccountId(
cryptohome::CreateAccountIdentifierFromAccountId( user->GetAccountId())
user->GetAccountId()), .account_id());
chromeos::attestation::kContentProtectionKeyPrefix, request.set_key_label_match(
base::BindOnce( chromeos::attestation::kContentProtectionKeyPrefix);
&ChromeBrowsingDataRemoverDelegate::OnClearPlatformKeys, request.set_match_behavior(
weak_ptr_factory_.GetWeakPtr(), ::attestation::DeleteKeysRequest::MATCH_BEHAVIOR_PREFIX);
CreateTaskCompletionClosure(
TracingDataType::kTpmAttestationKeys))); 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) #endif // defined(OS_CHROMEOS)
...@@ -1281,9 +1293,8 @@ bool ChromeBrowsingDataRemoverDelegate::IsForAllTime() const { ...@@ -1281,9 +1293,8 @@ bool ChromeBrowsingDataRemoverDelegate::IsForAllTime() const {
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
void ChromeBrowsingDataRemoverDelegate::OnClearPlatformKeys( void ChromeBrowsingDataRemoverDelegate::OnClearPlatformKeys(
base::OnceClosure done, base::OnceClosure done,
base::Optional<bool> result) { bool result) {
LOG_IF(ERROR, !result.has_value() || !result.value()) LOG_IF(ERROR, !result) << "Failed to clear platform keys.";
<< "Failed to clear platform keys.";
std::move(done).Run(); std::move(done).Run();
} }
#endif #endif
...@@ -277,7 +277,7 @@ class ChromeBrowsingDataRemoverDelegate ...@@ -277,7 +277,7 @@ class ChromeBrowsingDataRemoverDelegate
bool IsForAllTime() const; bool IsForAllTime() const;
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
void OnClearPlatformKeys(base::OnceClosure done, base::Optional<bool> result); void OnClearPlatformKeys(base::OnceClosure done, bool);
#endif #endif
#if BUILDFLAG(ENABLE_PLUGINS) #if BUILDFLAG(ENABLE_PLUGINS)
......
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/login/users/mock_user_manager.h" #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/account_id/account_id.h"
#include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/scoped_user_manager.h"
#endif // defined(OS_CHROMEOS) #endif // defined(OS_CHROMEOS)
...@@ -272,27 +272,6 @@ class TestSearchEngineDelegate ...@@ -272,27 +272,6 @@ class TestSearchEngineDelegate
}; };
#endif #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 { class RemoveCookieTester {
public: public:
RemoveCookieTester() {} RemoveCookieTester() {}
...@@ -1766,19 +1745,18 @@ TEST_F(ChromeBrowsingDataRemoverDelegateTest, ...@@ -1766,19 +1745,18 @@ TEST_F(ChromeBrowsingDataRemoverDelegateTest,
user_manager::ScopedUserManager user_manager_enabler( user_manager::ScopedUserManager user_manager_enabler(
base::WrapUnique(mock_user_manager)); base::WrapUnique(mock_user_manager));
// Creates a derived fake global instance destroyed in chromeos::AttestationClient::InitializeFake();
// CryptohomeClient::Shutdown().
auto* cryptohome_client = new FakeCryptohomeClient();
BlockUntilBrowsingDataRemoved( BlockUntilBrowsingDataRemoved(
base::Time(), base::Time::Max(), base::Time(), base::Time::Max(),
content::BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES, false); content::BrowsingDataRemover::DATA_TYPE_MEDIA_LICENSES, false);
// Expect exactly one call. No calls means no attempt to delete keys and more const std::vector<::attestation::DeleteKeysRequest>& history =
// than one call means a significant performance problem. chromeos::AttestationClient::Get()
EXPECT_EQ(1, cryptohome_client->delete_keys_call_count()); ->GetTestInterface()
->delete_keys_history();
EXPECT_EQ(history.size(), 1);
chromeos::CryptohomeClient::Shutdown(); chromeos::AttestationClient::Shutdown();
} }
#endif #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