// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_BROWSER_CAST_FEATURE_LIST_CREATOR_H_
#define CHROMECAST_BROWSER_CAST_FEATURE_LIST_CREATOR_H_
#include <memory>
#include <string>
#include "base/feature_list.h"
#include "chromecast/base/process_types.h"
class PrefService;
namespace chromecast {
// Creator for the singleton |FeatureList|. Stateful due to having to create and
// hold a |PrefService| instance until |CastBrowserProcess| takes ownership when
// the full browser process starts,
class CastFeatureListCreator {
public:
CastFeatureListCreator();
CastFeatureListCreator(const CastFeatureListCreator&) = delete;
CastFeatureListCreator& operator=(const CastFeatureListCreator&) = delete;
virtual ~CastFeatureListCreator();
// Creates the |PrefService| and uses it to initialize |FeatureList|. Retains
// ownership of the |PrefService|. Based on the given |ProcessType|, different
// files will be used to store prefs.
void CreatePrefServiceAndFeatureList(
ProcessType process_type = ProcessType::kCastService);
// Takes ownership of the |PrefService| previously created.
std::unique_ptr<PrefService> TakePrefService();
// Sets the extra features to be enabled.
void SetExtraEnableFeatures(
const std::vector<const base::Feature*>& extra_enable_features);
// Sets the extra features to be disabled.
void SetExtraDisableFeatures(
const std::vector<const base::Feature*>& extra_disable_features);
private:
// Holds the |PrefService| until TakePrefService() is called and ownership
// is taken away.
std::unique_ptr<PrefService> pref_service_;
// Extra features that can be enabled at run time.
std::string extra_enable_features_;
// Extra features that can be disabled at run time.
std::string extra_disable_features_;
};
} // namespace chromecast
#endif // CHROMECAST_BROWSER_CAST_FEATURE_LIST_CREATOR_H_