// Copyright 2015 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_QUIC_NETWORK_CONNECTION_H_
#define NET_QUIC_NETWORK_CONNECTION_H_

#include "base/macros.h"
#include "net/base/net_export.h"
#include "net/base/network_change_notifier.h"

namespace net {

// This class stores information about the current network type and
// provides a textual description of it.
class NET_EXPORT NetworkConnection
    : public NetworkChangeNotifier::IPAddressObserver,
      public NetworkChangeNotifier::ConnectionTypeObserver {
 public:
  NetworkConnection();
  ~NetworkConnection() override;

  // Returns the underlying connection type.
  NetworkChangeNotifier::ConnectionType connection_type() {
    return connection_type_;
  }

  // Return a string equivalent of current connection type. Callers don't need
  // to make a copy of the returned C-string value. If the connection type is
  // CONNECTION_WIFI, then we'll tease out some details when we are on WiFi, and
  // hopefully leave only ethernet (with no WiFi available) in the
  // CONNECTION_UNKNOWN category.  This *might* err if there is both ethernet,
  // as well as WiFi, where WiFi was not being used that much. Most platforms
  // don't distinguish Wifi vs Etherenet, and call everything CONNECTION_UNKNOWN
  // :-(. Fo non CONNECTIION_WIFI, this returns the C-string returned by
  // NetworkChangeNotifier::ConnectionTypeToString.
  const char* connection_description() { return connection_description_; }

  // NetworkChangeNotifier::IPAddressObserver methods:
  void OnIPAddressChanged() override;

  // NetworkChangeNotifier::ConnectionTypeObserver methods:
  void OnConnectionTypeChanged(
      NetworkChangeNotifier::ConnectionType type) override;

 private:
  // Cache the connection type to avoid calling the potentially expensive
  // NetworkChangeNotifier::GetConnectionType() function.
  NetworkChangeNotifier::ConnectionType connection_type_;
  // Cache the connection description string to avoid calling the expensive
  // GetWifiPHYLayerProtocol() function.
  const char* connection_description_;

  DISALLOW_COPY_AND_ASSIGN(NetworkConnection);
};

}  // namespace net

#endif  // NET_QUIC_NETWORK_CONNECTION_H_
