// Copyright 2017 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 CHROMEOS_COMPONENTS_TETHER_ASYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_H_
#define CHROMEOS_COMPONENTS_TETHER_ASYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_H_

#include "base/macros.h"

namespace chromeos {

namespace tether {

class TetherHostFetcher;
class DisconnectTetheringRequestSender;
class NetworkConfigurationRemover;
class WifiHotspotDisconnector;

// Container for objects owned by the Tether component which have an
// asynchronous shutdown flow (i.e., they cannot be deleted until they complete
// asynchronous operations). Objects which can be shut down synchronously are
// owned by SynchronousShutdownObjectContainer.
class AsynchronousShutdownObjectContainer {
 public:
  AsynchronousShutdownObjectContainer() {}
  virtual ~AsynchronousShutdownObjectContainer() {}

  // Shuts down the objects contained by this class and invokes
  // |shutdown_complete_callback| upon completion. This function should only be
  // called once.
  virtual void Shutdown(const base::Closure& shutdown_complete_callback) = 0;

  virtual TetherHostFetcher* tether_host_fetcher() = 0;
  virtual DisconnectTetheringRequestSender*
  disconnect_tethering_request_sender() = 0;
  virtual NetworkConfigurationRemover* network_configuration_remover() = 0;
  virtual WifiHotspotDisconnector* wifi_hotspot_disconnector() = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(AsynchronousShutdownObjectContainer);
};

}  // namespace tether

}  // namespace chromeos

#endif  // CHROMEOS_COMPONENTS_TETHER_ASYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_H_
