// Copyright 2018 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 SERVICES_NETWORK_NETWORK_QUALITY_ESTIMATOR_MANAGER_H_
#define SERVICES_NETWORK_NETWORK_QUALITY_ESTIMATOR_MANAGER_H_

#include <memory>

#include "base/component_export.h"
#include "base/macros.h"
#include "base/sequence_checker.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/interface_ptr_set.h"
#include "net/nqe/effective_connection_type.h"
#include "net/nqe/effective_connection_type_observer.h"
#include "services/network/public/mojom/network_quality_estimator_manager.mojom.h"

namespace net {
class NetworkQualityEstimator;
class NetLog;
}  // namespace net

namespace network {

// Implementation of mojom::NetworkQualityEstimatorManager. All accesses to this
// class are done through mojo on the main thread. This registers itself to
// receive broadcasts from net::EffectiveConnectionTypeObserver and rebroadcasts
// the notifications to mojom::NetworkQualityEstimatorManagerClients through
// mojo pipes.
class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkQualityEstimatorManager
    : public mojom::NetworkQualityEstimatorManager,
      public net::EffectiveConnectionTypeObserver {
 public:
  explicit NetworkQualityEstimatorManager(net::NetLog* net_log);

  ~NetworkQualityEstimatorManager() override;

  // Binds a NetworkQualityEstimatorManager request to this object. Mojo
  // messages coming through the associated pipe will be served by this object.
  void AddRequest(mojom::NetworkQualityEstimatorManagerRequest request);

  // mojom::NetworkQualityEstimatorManager implementation:
  void RequestNotifications(
      mojom::NetworkQualityEstimatorManagerClientPtr client_ptr) override;

  net::NetworkQualityEstimator* GetNetworkQualityEstimator() const;

 private:
  // net::EffectiveConnectionTypeObserver implementation:
  void OnEffectiveConnectionTypeChanged(
      net::EffectiveConnectionType type) override;

  std::unique_ptr<net::NetworkQualityEstimator> network_quality_estimator_;
  mojo::BindingSet<mojom::NetworkQualityEstimatorManager> bindings_;
  mojo::InterfacePtrSet<mojom::NetworkQualityEstimatorManagerClient> clients_;
  net::EffectiveConnectionType effective_connection_type_;

  SEQUENCE_CHECKER(sequence_checker_);

  DISALLOW_COPY_AND_ASSIGN(NetworkQualityEstimatorManager);
};

}  // namespace network

#endif  // SERVICES_NETWORK_NETWORK_QUALITY_ESTIMATOR_MANAGER_H_
