blob: 79c0e4afb55cd9941e5d42524bf9d49ef4608965 [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 ANDROID_WEBVIEW_BROWSER_AW_FEATURE_LIST_CREATOR_H_
#define ANDROID_WEBVIEW_BROWSER_AW_FEATURE_LIST_CREATOR_H_
#include <memory>
#include "android_webview/browser/aw_field_trials.h"
#include "android_webview/browser/aw_variations_service_client.h"
#include "base/metrics/field_trial.h"
#include "components/policy/core/browser/browser_policy_connector_base.h"
#include "components/prefs/pref_service.h"
#include "components/variations/service/variations_field_trial_creator.h"
namespace android_webview {
// Used by WebView 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 AwFeatureListCreator {
public:
AwFeatureListCreator();
~AwFeatureListCreator();
// Initializes all necessary parameters to create the feature list and setup
// field trials.
void CreateFeatureListAndFieldTrials();
// Passes ownership of the |local_state_| to the caller.
std::unique_ptr<PrefService> TakePrefService() {
DCHECK(local_state_);
return std::move(local_state_);
}
// Passes ownership of the |browser_policy_connector_| to the caller.
std::unique_ptr<policy::BrowserPolicyConnectorBase>
TakeBrowserPolicyConnector() {
DCHECK(browser_policy_connector_);
return std::move(browser_policy_connector_);
}
private:
// Sets up the field trials and related initialization.
void SetUpFieldTrials();
// Stores the seed. VariationsSeedStore keeps a raw pointer to this, so it
// must persist for the process lifetime. Not persisted accross runs.
// If TakePrefService() is called, the caller will take the ownership
// of this variable. Stop using this variable afterwards.
std::unique_ptr<PrefService> local_state_;
// A/B testing infrastructure for the entire application. empty until
// |SetupFieldTrials()| is called.
std::unique_ptr<base::FieldTrialList> field_trial_list_;
// Performs set up for any WebView specific field trials.
std::unique_ptr<AwFieldTrials> aw_field_trials_;
// Responsible for creating a feature list from the seed.
std::unique_ptr<variations::VariationsFieldTrialCreator>
variations_field_trial_creator_;
// If TakePrefService() is called, the caller will take the ownership
// of this variable. Stop using this variable afterwards.
std::unique_ptr<policy::BrowserPolicyConnectorBase> browser_policy_connector_;
std::unique_ptr<AwVariationsServiceClient> client_;
DISALLOW_COPY_AND_ASSIGN(AwFeatureListCreator);
};
} // namespace android_webview
#endif // ANDROID_WEBVIEW_BROWSER_AW_FEATURE_LIST_CREATOR_H_