blob: d3495826978501e72b011b42a09022005b1fca90 [file] [log] [blame]
// Copyright 2017 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_PLATFORM_FIELD_TRIALS_H_
#define COMPONENTS_VARIATIONS_PLATFORM_FIELD_TRIALS_H_
#include "base/component_export.h"
#include "base/metrics/field_trial.h"
#include "components/variations/entropy_provider.h"
namespace variations {
// Infrastructure for setting up platform specific field trials. Chrome and
// WebView make use through their corresponding subclasses.
class COMPONENT_EXPORT(VARIATIONS) PlatformFieldTrials {
public:
PlatformFieldTrials() = default;
PlatformFieldTrials(const PlatformFieldTrials&) = delete;
PlatformFieldTrials& operator=(const PlatformFieldTrials&) = delete;
virtual ~PlatformFieldTrials() = default;
// Called once trials are set up to do platform-specific initialization.
// Mainly used for setting up persistent histograms.
virtual void OnVariationsSetupComplete() {}
// Create field trials that are defined by client code rather than being sent
// from the variations server. Called after server trials are set up.
// |has_seed| indicates that the variations service used a seed to create
// field trials. This can be used to prevent associating a field trial with a
// feature that you expect to be controlled by the variations seed.
// |entropy_providers| should be used for randomizing trials. Trials that
// should be visible to Google web properties should use the low_entropy()
// provider.
virtual void SetUpClientSideFieldTrials(
bool has_seed,
const variations::EntropyProviders& entropy_providers,
base::FeatureList* feature_list) {}
// Registers any synthetic field trials. Will be called later than the above
// methods, in particular after g_browser_process is available..
virtual void RegisterSyntheticTrials() {}
// Registers feature overrides. Called after server trials and client side
// trials are set up, before initializing the singleton feature list. This
// can be used to override a feature after a field trial you expect to
// control. For example, this mechanism can be used to provide
// different per-platform feature defaults for platforms that are compiled
// together, like Android WebView and Android Chrome.
virtual void RegisterFeatureOverrides(base::FeatureList* feature_list) {}
};
} // namespace variations
#endif // COMPONENTS_VARIATIONS_PLATFORM_FIELD_TRIALS_H_