blob: 2837476cba2d5fb9d4156b40c15683432def9db8 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_METRICS_STRUCTURED_KEY_DATA_PREFS_DELEGATE_H_
#define COMPONENTS_METRICS_STRUCTURED_KEY_DATA_PREFS_DELEGATE_H_
#include <cstdint>
#include <string>
#include <string_view>
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/sequence_checker.h"
#include "base/time/time.h"
#include "components/metrics/structured/lib/key_data.h"
#include "components/prefs/pref_service.h"
namespace metrics::structured {
class KeyDataPrefsDelegateTest;
FORWARD_DECLARE_TEST(KeyDataPrefsDelegateTest, Purge);
// Storages Structured Metrics key data in the devices preferences.
//
// The keys are stored as a dictionary keyed by the project name and the value
// is a base::Value representation of KeyProto.
//
// Note: users are responsible for registering the preference.
class KeyDataPrefsDelegate : public KeyData::StorageDelegate {
public:
KeyDataPrefsDelegate(PrefService* local_state, std::string_view pref_name);
~KeyDataPrefsDelegate() override;
// KeyData::StorageDelegate:
bool IsReady() const override;
const KeyProto* GetKey(uint64_t project_name_hash) const override;
void UpsertKey(uint64_t project_name_hash,
base::TimeDelta last_key_rotation,
base::TimeDelta key_rotation_period) override;
void Purge() override;
private:
FRIEND_TEST_ALL_PREFIXES(KeyDataPrefsDelegateTest, Purge);
void LoadKeysFromPrefs();
// Updates the prefs stored for |project_name_hash|.
void UpdatePrefsByProject(uint64_t project_name_hash,
const KeyProto& key_proto);
raw_ptr<PrefService> local_state_;
// Name of the preference to store the
std::string pref_name_;
// In-memory representation of the keys. Due to the StorageDelegate interface,
// the prefs value is unable to be used directly.
KeyDataProto proto_;
SEQUENCE_CHECKER(sequence_checker_);
};
} // namespace metrics::structured
#endif // COMPONENTS_METRICS_STRUCTURED_KEY_DATA_PREFS_DELEGATE_H_