// 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/basictypes.h"
#include "net/base/net_export.h"
#include "net/base/network_change_notifier.h"

namespace net {

namespace test {
class NetworkConnectionPeer;
}  // namespace test

// This class returns the current network's connection description. It also
// cache's the connection description to fix crbug.com/422516.
class NET_EXPORT NetworkConnection
    : public NetworkChangeNotifier::IPAddressObserver,
      public NetworkChangeNotifier::ConnectionTypeObserver {
 public:
  NetworkConnection();
  ~NetworkConnection() override {}

  // 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* GetDescription();

  // It clears the cached connection_type_ and connection_description_.
  void Clear();

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

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

 private:
  friend class test::NetworkConnectionPeer;

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

  DISALLOW_COPY_AND_ASSIGN(NetworkConnection);
};

}  // namespace net

#endif  // NET_QUIC_NETWORK_CONNECTION_H_
