| // 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 "base/time/time.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 "net/nqe/rtt_throughput_estimates_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 |
| // net::RTTAndThroughputEstimatesObserver. NetworkQualityEstimatorManager then |
| // rebroadcasts the notifications to |
| // mojom::NetworkQualityEstimatorManagerClients through mojo pipes. |
| class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkQualityEstimatorManager |
| : public mojom::NetworkQualityEstimatorManager, |
| public net::EffectiveConnectionTypeObserver, |
| public net::RTTAndThroughputEstimatesObserver { |
| 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; |
| // net::RTTAndThroughputEstimatesObserver implementation: |
| void OnRTTOrThroughputEstimatesComputed( |
| base::TimeDelta http_rtt, |
| base::TimeDelta transport_rtt, |
| int32_t downstream_throughput_kbps) override; |
| |
| std::unique_ptr<net::NetworkQualityEstimator> network_quality_estimator_; |
| mojo::BindingSet<mojom::NetworkQualityEstimatorManager> bindings_; |
| mojo::InterfacePtrSet<mojom::NetworkQualityEstimatorManagerClient> clients_; |
| net::EffectiveConnectionType effective_connection_type_; |
| base::TimeDelta http_rtt_; |
| base::TimeDelta transport_rtt_; |
| int32_t downstream_throughput_kbps_; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| |
| DISALLOW_COPY_AND_ASSIGN(NetworkQualityEstimatorManager); |
| }; |
| |
| } // namespace network |
| |
| #endif // SERVICES_NETWORK_NETWORK_QUALITY_ESTIMATOR_MANAGER_H_ |