blob: 0d610680764e96c5e8fdc3343696fe1f5f9749fc [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 NET_NQE_NETWORK_QUALITY_PROVIDER_H_
#define NET_NQE_NETWORK_QUALITY_PROVIDER_H_
#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/macros.h"
#include "base/optional.h"
#include "base/time/time.h"
#include "net/base/net_export.h"
#include "net/nqe/effective_connection_type.h"
#include "starboard/types.h"
namespace net {
class EffectiveConnectionTypeObserver;
// Provides simple interface to obtain the network quality, and to listen to
// the changes in the network quality.
class NET_EXPORT NetworkQualityProvider {
public:
virtual ~NetworkQualityProvider() {}
// Returns the current effective connection type. The effective connection
// type is computed by the network quality estimator at regular intervals and
// at certain events (e.g., connection change).
virtual EffectiveConnectionType GetEffectiveConnectionType() const;
// Adds |observer| to a list of effective connection type observers.
// The observer must register and unregister itself on the same thread.
// |observer| would be notified on the thread on which it registered.
// |observer| would be notified of the current effective connection
// type in the next message pump.
virtual void AddEffectiveConnectionTypeObserver(
EffectiveConnectionTypeObserver* observer) {}
// Removes |observer| from a list of effective connection type observers.
virtual void RemoveEffectiveConnectionTypeObserver(
EffectiveConnectionTypeObserver* observer) {}
// Returns the current HTTP RTT estimate. If the estimate is unavailable,
// the returned optional value is null. The RTT at the HTTP layer measures the
// time from when the request was sent (this happens after the connection is
// established) to the time when the response headers were received.
virtual base::Optional<base::TimeDelta> GetHttpRTT() const;
// Returns the current transport RTT estimate. If the estimate is
// unavailable, the returned optional value is null. The RTT at the transport
// layer provides an aggregate estimate of the transport RTT as computed by
// various underlying TCP and QUIC connections.
virtual base::Optional<base::TimeDelta> GetTransportRTT() const;
// Returns the current downstream throughput estimate (in kilobits per
// second). If the estimate is unavailable, the returned optional value is
// null.
virtual base::Optional<int32_t> GetDownstreamThroughputKbps() const;
// Returns the current bandwidth delay product estimate (in kilobits). If the
// estimate is not available, the returned optional value is null. The
// bandwidth delay product is calculated from the transport RTT and the
// downlink bandwidth estimates.
virtual base::Optional<int32_t> GetBandwidthDelayProductKbits() const;
protected:
NetworkQualityProvider() {}
private:
DISALLOW_COPY_AND_ASSIGN(NetworkQualityProvider);
};
} // namespace net
#endif // NET_NQE_NETWORK_QUALITY_PROVIDER_H_