#ifndef CONTENT_BROWSER_PRELOADING_PRELOADING_CONFIG_H_
#define CONTENT_BROWSER_PRELOADING_PRELOADING_CONFIG_H_
#include <string_view>
#include "base/containers/flat_map.h"
#include "base/no_destructor.h"
#include "base/values.h"
#include "content/public/browser/preloading.h"
namespace content {
namespace test {
class PreloadingConfigOverride;
}
class CONTENT_EXPORT PreloadingConfig {
public:
PreloadingConfig();
~PreloadingConfig();
static PreloadingConfig& GetInstance();
bool ShouldHoldback(PreloadingType preloading_type,
PreloadingPredictor predictor);
double SamplingLikelihood(PreloadingType preloading_type,
PreloadingPredictor predictor);
void ParseConfig();
private:
friend class content::test::PreloadingConfigOverride;
struct Key {
Key(std::string_view preloading_type, std::string_view predictdor);
static Key FromEnums(PreloadingType preloading_type,
PreloadingPredictor predictor);
std::string preloading_type_;
std::string predictor_;
};
struct Entry {
static Entry FromDict(const base::Value::Dict* dict);
bool holdback_ = false;
float sampling_likelihood_ = 1.0;
};
struct KeyCompare {
bool operator()(const Key& lhs, const Key& rhs) const;
};
static PreloadingConfig* OverrideForTesting(
PreloadingConfig* config_override);
void SetHoldbackForTesting(PreloadingType preloading_type,
PreloadingPredictor predictor,
bool holdback);
void SetHoldbackForTesting(std::string_view preloading_type,
std::string_view predictdor,
bool holdback);
base::flat_map<Key, Entry, KeyCompare> entries_;
};
}
#endif