blob: 27aea7e653a464a13bfb68f17bf8c56be2e66c96 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_AVAILABILITY_MODEL_H_
#define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_AVAILABILITY_MODEL_H_
#include <stdint.h>
#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/optional.h"
namespace base {
struct Feature;
} // namespace base
namespace feature_engagement {
// An AvailabilityModel tracks when each feature was made available to an
// end user.
class AvailabilityModel {
public:
// Invoked when the availability data has finished loading, and whether the
// load was a success. In the case of a failure, it is invalid to ever call
// GetAvailability(...).
using OnInitializedCallback = base::OnceCallback<void(bool success)>;
virtual ~AvailabilityModel() = default;
// Starts initialization of the AvailabilityModel.
virtual void Initialize(OnInitializedCallback callback,
uint32_t current_day) = 0;
// Returns whether the model is ready, i.e. whether it has been successfully
// initialized.
virtual bool IsReady() const = 0;
// Returns the day number since epoch (1970-01-01) in the local timezone for
// when the particular |feature| was made available.
// See TimeProvider::GetCurrentDay().
virtual base::Optional<uint32_t> GetAvailability(
const base::Feature& feature) const = 0;
protected:
AvailabilityModel() = default;
private:
DISALLOW_COPY_AND_ASSIGN(AvailabilityModel);
};
} // namespace feature_engagement
#endif // COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_AVAILABILITY_MODEL_H_