blob: 99e704b0fd5f76dfa1a74be14d44b14f3db9c4a4 [file] [log] [blame]
// Copyright 2019 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 WEBLAYER_BROWSER_FEATURE_LIST_CREATOR_H_
#define WEBLAYER_BROWSER_FEATURE_LIST_CREATOR_H_
#include <memory>
#include "weblayer/browser/weblayer_field_trials.h"
class PrefService;
namespace variations {
class VariationsService;
}
namespace weblayer {
class SystemNetworkContextManager;
// Used by WebLayer to set up field trials based on the stored variations
// seed data. Once created this object must exist for the lifetime of the
// process as it contains the FieldTrialList that can be queried for the state
// of experiments.
class FeatureListCreator {
public:
explicit FeatureListCreator(PrefService* local_state);
FeatureListCreator(const FeatureListCreator&) = delete;
FeatureListCreator& operator=(const FeatureListCreator&) = delete;
~FeatureListCreator();
// Return the single instance of FeatureListCreator. This does *not* trigger
// creation.
static FeatureListCreator* GetInstance();
void SetSystemNetworkContextManager(
SystemNetworkContextManager* system_network_context_manager);
// Must be called after SetSharedURLLoaderFactory.
void CreateFeatureListAndFieldTrials();
// Called from content::BrowserMainParts::PreMainMessageLoopRun() to perform
// initialization necessary prior to running the main message loop.
void PerformPreMainMessageLoopStartup();
// Calls through to the VariationService.
void OnBrowserFragmentStarted();
variations::VariationsService* variations_service() const {
return variations_service_.get();
}
private:
void SetUpFieldTrials();
// Owned by BrowserProcess.
PrefService* local_state_;
SystemNetworkContextManager* system_network_context_manager_; // NOT OWNED.
std::unique_ptr<variations::VariationsService> variations_service_;
WebLayerFieldTrials weblayer_field_trials_;
// Set to true the first time OnBrowserFragmentStarted() is called.
bool has_browser_fragment_started_ = false;
};
} // namespace weblayer
#endif // WEBLAYER_BROWSER_FEATURE_LIST_CREATOR_H_