blob: be411abd50551b4b22e94d611677f3c81b43f8f2 [file] [log] [blame]
// Copyright 2023 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_VARIATIONS_VARIATIONS_SAFE_SEED_STORE_H_
#define COMPONENTS_VARIATIONS_VARIATIONS_SAFE_SEED_STORE_H_
#include <string>
#include "base/time/time.h"
#include "components/variations/seed_reader_writer.h"
namespace variations {
// Class to encapsulate details of reading and modifying safe seed state.
//
// This is pure virtual so that different platforms / contexts (e.g. CrOS
// early-boot) can provide their own implementations that will exhibit
// consistent behavior with safe seed usage, and to make sure that if one
// implementation is updated, all others are too.
//
// All reading and writing to VariationsSafeSeed* prefs should go through a
// subclass of VariationsSafeSeedStore.
class VariationsSafeSeedStore {
public:
virtual ~VariationsSafeSeedStore() = default;
// Getter and setter for the time at which the safe seed was persisted to the
// underlying storage.
virtual base::Time GetFetchTime() const = 0;
virtual void SetFetchTime(const base::Time& fetch_time) = 0;
// Getter for the milestone that was used for the safe seed.
virtual int GetMilestone() const = 0;
// Getter for the last server-provided safe seed date of when the seed to be
// used was fetched. (See VariationsSeedStore::GetTimeForStudyDateChecks().)
virtual base::Time GetTimeForStudyDateChecks() const = 0;
// Setter for the safe seed and other seed-related info.
virtual StoreSeedResult SetCompressedSeed(ValidatedSeedInfo seed_info) = 0;
// Getter and setter for the locale associated with the safe seed in the
// underlying storage.
virtual std::string GetLocale() const = 0;
virtual void SetLocale(const std::string& locale) = 0;
// Getter for the permanent consistency country associated with the safe seed
// in the underlying storage.
virtual std::string GetPermanentConsistencyCountry() const = 0;
// Getter for the session consistency country associated with the safe seed in
// the underlying storage.
virtual std::string GetSessionConsistencyCountry() const = 0;
// Getter and setter for SeedReaderWriter for testing.
virtual SeedReaderWriter* GetSeedReaderWriterForTesting() = 0;
virtual void SetSeedReaderWriterForTesting(
std::unique_ptr<SeedReaderWriter> seed_reader_writer) = 0;
// Clear all state in the underlying storage.
virtual void ClearState() = 0;
// Reads seed data and returns the result of the load. If a pointer for the
// signature is provided, the signature will be read and stored into
// |base64_seed_signature|. The value stored into |seed_data| should only be
// used if the result is `LoadSeedResult::kSuccess`.
// Side-effect: If the read fails, clears the prefs associated with the seed.
virtual LoadSeedResult ReadSeedData(std::string* seed_data,
std::string* base64_seed_signature) = 0;
// Reads and processes seed data and calls `done_callback` with the result of
// the load, the seed data, and the signature. The seed data and signature
// should only be used if the result is `LoadSeedResult::kSuccess`.
// Side-effect: If the read fails, clears the prefs associated with the seed.
virtual void ReadSeedData(
SeedReaderWriter::ReadSeedDataCallback done_callback) = 0;
};
} // namespace variations
#endif // COMPONENTS_VARIATIONS_VARIATIONS_SAFE_SEED_STORE_H_