chromium/services/network/public/mojom/network_quality_estimator_manager.mojom

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module network.mojom;

import "mojo/public/mojom/base/time.mojom";
import "services/network/public/mojom/network_types.mojom";

// A client interface that subscribes to network quality change events from
// NetworkQualityEstimatorManager.
interface NetworkQualityEstimatorManagerClient {
  // Invoked when there is a change in the network quality. The effective
  // connection type is computed by the network quality estimator at regular
  // intervals and at certain events (e.g., connection change).
  // |http_rtt| is the current estimate of the HTTP RTT. 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. A negative value of |http_rtt| implies that the RTT estimate
  // was unavailable.
  // |transport_rtt| is the current estimate of the transport layer RTT. The RTT
  // at the transport layer provides an aggregate estimate of the transport RTT
  // as computed by various underlying TCP and QUIC connections. A negative
  // value of |http_rtt| implies that the RTT estimate was unavailable.
  // |downlink_bandwidth_kbps| is the current downlink throughput estimate (in
  // kilobits per second). A negative value of |downlink_bandwidth_kbps| implies
  // that the downlink throughput estimate was unavailable.
  OnNetworkQualityChanged(
    EffectiveConnectionType type,
    mojo_base.mojom.TimeDelta http_rtt,
    mojo_base.mojom.TimeDelta transport_rtt,
    int32 downlink_bandwidth_kbps);
};

// An interface that broadcasts network quality change events.
interface NetworkQualityEstimatorManager {
  // Requests to receive notification when there is a change in the network
  // quality.
  RequestNotifications(
      pending_remote<NetworkQualityEstimatorManagerClient> client);
};