// Copyright 2016 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_CACHED_NETWORK_QUALITY_H_
#define NET_NQE_CACHED_NETWORK_QUALITY_H_

#include "base/time/time.h"
#include "net/base/net_export.h"
#include "net/nqe/effective_connection_type.h"
#include "net/nqe/network_quality.h"

namespace net {

namespace nqe {

namespace internal {

// CachedNetworkQuality stores the quality of a previously seen network.
class NET_EXPORT_PRIVATE CachedNetworkQuality {
 public:
  CachedNetworkQuality();
  explicit CachedNetworkQuality(
      EffectiveConnectionType effective_connection_type);

  // |last_update_time| is the time when the |network_quality| was computed.
  CachedNetworkQuality(base::TimeTicks last_update_time,
                       const NetworkQuality& network_quality,
                       EffectiveConnectionType effective_connection_type);
  CachedNetworkQuality(const CachedNetworkQuality& other);
  ~CachedNetworkQuality();

  // Returns the network quality associated with this cached entry.
  const NetworkQuality& network_quality() const { return network_quality_; }

  CachedNetworkQuality& operator=(const CachedNetworkQuality& other);

  // Returns true if this cache entry was updated before
  // |cached_network_quality|.
  bool OlderThan(const CachedNetworkQuality& cached_network_quality) const;

  base::TimeTicks last_update_time() { return last_update_time_; }

  EffectiveConnectionType effective_connection_type() const {
    return effective_connection_type_;
  }

 private:
  // Time when this cache entry was last updated.
  base::TimeTicks last_update_time_;

  // Quality of this cached network.
  NetworkQuality network_quality_;

  // Effective connection type of the cached network.
  EffectiveConnectionType effective_connection_type_;
};

}  // namespace internal

}  // namespace nqe

}  // namespace net

#endif  // NET_NQE_CACHED_NETWORK_QUALITY_H_
