chromium/android_webview/browser/aw_feature_list_creator.h

// 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 ANDROID_WEBVIEW_BROWSER_AW_FEATURE_LIST_CREATOR_H_
#define ANDROID_WEBVIEW_BROWSER_AW_FEATURE_LIST_CREATOR_H_

#include <memory>
#include <utility>

#include "android_webview/browser/aw_browser_policy_connector.h"
#include "android_webview/browser/aw_field_trials.h"
#include "android_webview/browser/variations/aw_variations_service_client.h"
#include "components/policy/core/browser/browser_policy_connector_base.h"
#include "components/variations/service/variations_field_trial_creator.h"

class PrefService;

namespace android_webview {

// Used by WebView to set up field trials based on the stored variations seed
// data.
class AwFeatureListCreator {
 public:
  AwFeatureListCreator();

  AwFeatureListCreator(const AwFeatureListCreator&) = delete;
  AwFeatureListCreator& operator=(const AwFeatureListCreator&) = delete;

  ~AwFeatureListCreator();

  // Initializes all necessary parameters to create the feature list and setup
  // field trials.
  void CreateFeatureListAndFieldTrials();

  void CreateLocalState();

  // 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<AwBrowserPolicyConnector> TakeBrowserPolicyConnector() {
    DCHECK(browser_policy_connector_);
    return std::move(browser_policy_connector_);
  }

  static void DisableSignatureVerificationForTesting();

 private:
  std::unique_ptr<PrefService> CreatePrefService();

  // 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_;

  // 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_;

  std::unique_ptr<AwVariationsServiceClient> client_;

  std::unique_ptr<AwBrowserPolicyConnector> browser_policy_connector_;
};

}  // namespace android_webview

#endif  // ANDROID_WEBVIEW_BROWSER_AW_FEATURE_LIST_CREATOR_H_