// Copyright 2015 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 COMPONENTS_METRICS_SERVICES_MANAGER_METRICS_SERVICES_MANAGER_CLIENT_H_
#define COMPONENTS_METRICS_SERVICES_MANAGER_METRICS_SERVICES_MANAGER_CLIENT_H_

#include <memory>

#include "base/callback_forward.h"
#include "base/metrics/field_trial.h"

namespace metrics {
class MetricsServiceClient;
}

#if !defined(STARBOARD)
namespace network {
class SharedURLLoaderFactory;
}

namespace rappor {
class RapporServiceImpl;
}

namespace variations {
class VariationsService;
}
#endif

namespace metrics_services_manager {

// MetricsServicesManagerClient is an interface that allows
// MetricsServicesManager to interact with its embedder.
class MetricsServicesManagerClient {
 public:
  virtual ~MetricsServicesManagerClient() {}

  // Methods that create the various services in the context of the embedder.
#if !defined(STARBOARD)
  virtual std::unique_ptr<rappor::RapporServiceImpl>
  CreateRapporServiceImpl() = 0;
  virtual std::unique_ptr<variations::VariationsService>
  CreateVariationsService() = 0;
#endif
  virtual std::unique_ptr<metrics::MetricsServiceClient>
  CreateMetricsServiceClient() = 0;
  virtual std::unique_ptr<const base::FieldTrial::EntropyProvider>
  CreateEntropyProvider() = 0;

#if !defined(STARBOARD)
  // Returns the URL loader factory which the metrics services should use.
  virtual scoped_refptr<network::SharedURLLoaderFactory>
  GetURLLoaderFactory() = 0;
#endif

  // Returns whether metrics reporting is enabled.
  virtual bool IsMetricsReportingEnabled() = 0;

  // Returns whether metrics consent is given.
  virtual bool IsMetricsConsentGiven() = 0;

  // Returns whether there are any Incognito browsers/tabs open.
  virtual bool IsIncognitoSessionActive() = 0;

  // Update the running state of metrics services managed by the embedder, for
  // example, crash reporting.
  virtual void UpdateRunningServices(bool may_record, bool may_upload) {}

  // If the user has forced metrics collection on via the override flag.
  virtual bool IsMetricsReportingForceEnabled();
};

}  // namespace metrics_services_manager

#endif  // COMPONENTS_METRICS_SERVICES_MANAGER_METRICS_SERVICES_MANAGER_CLIENT_H_
