blob: 34af7ad907d4c00d1bbd800bc5bd13f877205e05 [file] [log] [blame]
// 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 BleConnectionManager;
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 BleConnectionManager* ble_connection_manager() = 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_