// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_ASH_COMPONENTS_TETHER_ASYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_H_
#define CHROMEOS_ASH_COMPONENTS_TETHER_ASYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_H_
#include "base/functional/callback_forward.h"
#include "chromeos/ash/components/tether/host_connection.h"
namespace ash::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() {}
AsynchronousShutdownObjectContainer(
const AsynchronousShutdownObjectContainer&) = delete;
AsynchronousShutdownObjectContainer& operator=(
const AsynchronousShutdownObjectContainer&) = delete;
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(base::OnceClosure 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;
virtual HostConnection::Factory* host_connection_factory() = 0;
};
} // namespace ash::tether
#endif // CHROMEOS_ASH_COMPONENTS_TETHER_ASYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_H_