// Copyright (c) 2011 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_FTP_FTP_NETWORK_SESSION_H_
#define NET_FTP_FTP_NETWORK_SESSION_H_

#include "base/memory/ref_counted.h"
#include "net/base/net_export.h"
#include "net/ftp/ftp_auth_cache.h"

namespace net {

class HostResolver;

// This class holds session objects used by FtpNetworkTransaction objects.
class NET_EXPORT_PRIVATE FtpNetworkSession
    : public base::RefCounted<FtpNetworkSession> {
 public:
  explicit FtpNetworkSession(HostResolver* host_resolver);

  HostResolver* host_resolver() { return host_resolver_; }
  FtpAuthCache* auth_cache() { return &auth_cache_; }

 private:
  friend class base::RefCounted<FtpNetworkSession>;

  virtual ~FtpNetworkSession();

  HostResolver* const host_resolver_;
  FtpAuthCache auth_cache_;
};

}  // namespace net

#endif  // NET_FTP_FTP_NETWORK_SESSION_H_
