blob: 3fa5a1c159ac17069e06abd85ef9af5f355870a5 [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_SYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_IMPL_H_
#define CHROMEOS_COMPONENTS_TETHER_SYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_IMPL_H_
#include <memory>
#include "chromeos/components/tether/synchronous_shutdown_object_container.h"
class PrefService;
namespace session_manager {
class SessionManager;
} // namespace session_manager
namespace chromeos {
namespace device_sync {
class DeviceSyncClient;
} // namespace device_sync
namespace secure_channel {
class SecureChannelClient;
} // namespace secure_channel
class NetworkStateHandler;
class NetworkConnect;
class NetworkConnectionHandler;
namespace tether {
class ActiveHost;
class ActiveHostNetworkStateUpdater;
class AsynchronousShutdownObjectContainer;
class ConnectionPreserver;
class NetworkConnectionHandlerTetherDelegate;
class DeviceIdTetherNetworkGuidMap;
class GmsCoreNotificationsStateTrackerImpl;
class HostScanner;
class HostScanScheduler;
class HostScanDevicePrioritizerImpl;
class HotspotUsageDurationTracker;
class KeepAliveScheduler;
class HostConnectionMetricsLogger;
class MasterHostScanCache;
class NetworkHostScanCache;
class NetworkListSorter;
class NotificationPresenter;
class NotificationRemover;
class PersistentHostScanCache;
class TetherConnector;
class TetherDisconnector;
class TetherHostResponseRecorder;
class TetherNetworkDisconnectionHandler;
class TetherSessionCompletionLogger;
class WifiHotspotConnector;
// Concrete SynchronousShutdownObjectContainer implementation.
class SynchronousShutdownObjectContainerImpl
: public SynchronousShutdownObjectContainer {
public:
class Factory {
public:
static std::unique_ptr<SynchronousShutdownObjectContainer> NewInstance(
AsynchronousShutdownObjectContainer* asychronous_container,
NotificationPresenter* notification_presenter,
GmsCoreNotificationsStateTrackerImpl*
gms_core_notifications_state_tracker,
PrefService* pref_service,
NetworkStateHandler* network_state_handler,
NetworkConnect* network_connect,
NetworkConnectionHandler* network_connection_handler,
session_manager::SessionManager* session_manager,
device_sync::DeviceSyncClient* device_sync_client,
secure_channel::SecureChannelClient* secure_channel_client);
static void SetInstanceForTesting(Factory* factory);
protected:
virtual std::unique_ptr<SynchronousShutdownObjectContainer> BuildInstance(
AsynchronousShutdownObjectContainer* asychronous_container,
NotificationPresenter* notification_presenter,
GmsCoreNotificationsStateTrackerImpl*
gms_core_notifications_state_tracker,
PrefService* pref_service,
NetworkStateHandler* network_state_handler,
NetworkConnect* network_connect,
NetworkConnectionHandler* network_connection_handler,
session_manager::SessionManager* session_manager,
device_sync::DeviceSyncClient* device_sync_client,
secure_channel::SecureChannelClient* secure_channel_client);
virtual ~Factory();
private:
static Factory* factory_instance_;
};
~SynchronousShutdownObjectContainerImpl() override;
// SynchronousShutdownObjectContainer:
ActiveHost* active_host() override;
HostScanCache* host_scan_cache() override;
HostScanScheduler* host_scan_scheduler() override;
TetherDisconnector* tether_disconnector() override;
protected:
SynchronousShutdownObjectContainerImpl(
AsynchronousShutdownObjectContainer* asychronous_container,
NotificationPresenter* notification_presenter,
GmsCoreNotificationsStateTrackerImpl*
gms_core_notifications_state_tracker,
PrefService* pref_service,
NetworkStateHandler* network_state_handler,
NetworkConnect* network_connect,
NetworkConnectionHandler* network_connection_handler,
session_manager::SessionManager* session_manager,
device_sync::DeviceSyncClient* device_sync_client,
secure_channel::SecureChannelClient* secure_channel_client);
private:
NetworkStateHandler* network_state_handler_;
std::unique_ptr<NetworkListSorter> network_list_sorter_;
std::unique_ptr<TetherHostResponseRecorder> tether_host_response_recorder_;
std::unique_ptr<DeviceIdTetherNetworkGuidMap>
device_id_tether_network_guid_map_;
std::unique_ptr<TetherSessionCompletionLogger>
tether_session_completion_logger_;
std::unique_ptr<HostScanDevicePrioritizerImpl> host_scan_device_prioritizer_;
std::unique_ptr<WifiHotspotConnector> wifi_hotspot_connector_;
std::unique_ptr<ActiveHost> active_host_;
std::unique_ptr<ActiveHostNetworkStateUpdater>
active_host_network_state_updater_;
std::unique_ptr<PersistentHostScanCache> persistent_host_scan_cache_;
std::unique_ptr<NetworkHostScanCache> network_host_scan_cache_;
std::unique_ptr<MasterHostScanCache> master_host_scan_cache_;
std::unique_ptr<NotificationRemover> notification_remover_;
std::unique_ptr<KeepAliveScheduler> keep_alive_scheduler_;
std::unique_ptr<HotspotUsageDurationTracker> hotspot_usage_duration_tracker_;
std::unique_ptr<ConnectionPreserver> connection_preserver_;
std::unique_ptr<HostScanner> host_scanner_;
std::unique_ptr<HostScanScheduler> host_scan_scheduler_;
std::unique_ptr<HostConnectionMetricsLogger> host_connection_metrics_logger_;
std::unique_ptr<TetherConnector> tether_connector_;
std::unique_ptr<TetherDisconnector> tether_disconnector_;
std::unique_ptr<TetherNetworkDisconnectionHandler>
tether_network_disconnection_handler_;
std::unique_ptr<NetworkConnectionHandlerTetherDelegate>
network_connection_handler_tether_delegate_;
DISALLOW_COPY_AND_ASSIGN(SynchronousShutdownObjectContainerImpl);
};
} // namespace tether
} // namespace chromeos
#endif // CHROMEOS_COMPONENTS_TETHER_SYNCHRONOUS_SHUTDOWN_OBJECT_CONTAINER_IMPL_H_