190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_handler.h"
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
73240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "base/threading/worker_pool.h"
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chromeos/network/client_cert_resolver.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/geolocation_handler.h"
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chromeos/network/managed_network_configuration_handler_impl.h"
12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/network/network_activation_handler.h"
133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "chromeos/network/network_cert_migrator.h"
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_configuration_handler.h"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_connection_handler.h"
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_device_handler.h"
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_event_log.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_profile_handler.h"
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_profile_observer.h"
202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chromeos/network/network_sms_handler.h"
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_state_handler.h"
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_state_handler_observer.h"
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace chromeos {
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)static NetworkHandler* g_network_handler = NULL;
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)NetworkHandler::NetworkHandler()
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    : message_loop_(base::MessageLoopProxy::current()) {
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CHECK(DBusThreadManager::IsInitialized());
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_event_log::Initialize();
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_state_handler_.reset(new NetworkStateHandler());
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  network_device_handler_.reset(new NetworkDeviceHandler());
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_profile_handler_.reset(new NetworkProfileHandler());
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_configuration_handler_.reset(new NetworkConfigurationHandler());
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  managed_network_configuration_handler_.reset(
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      new ManagedNetworkConfigurationHandlerImpl());
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (CertLoader::IsInitialized()) {
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    network_cert_migrator_.reset(new NetworkCertMigrator());
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    client_cert_resolver_.reset(new ClientCertResolver());
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  network_activation_handler_.reset(new NetworkActivationHandler());
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_connection_handler_.reset(new NetworkConnectionHandler());
462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  network_sms_handler_.reset(new NetworkSmsHandler());
4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  geolocation_handler_.reset(new GeolocationHandler());
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkHandler::~NetworkHandler() {
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_event_log::Shutdown();
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void NetworkHandler::Init() {
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_state_handler_->InitShillPropertyHandler();
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  network_profile_handler_->Init(network_state_handler_.get());
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  network_configuration_handler_->Init(network_state_handler_.get());
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  managed_network_configuration_handler_->Init(
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      network_state_handler_.get(),
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      network_profile_handler_.get(),
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      network_configuration_handler_.get());
62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  network_connection_handler_->Init(network_state_handler_.get(),
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                    network_configuration_handler_.get());
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (network_cert_migrator_)
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    network_cert_migrator_->Init(network_state_handler_.get());
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (client_cert_resolver_) {
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    client_cert_resolver_->Init(network_state_handler_.get(),
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                managed_network_configuration_handler_.get());
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
702385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  network_sms_handler_->Init();
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  geolocation_handler_->Init();
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static
7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void NetworkHandler::Initialize() {
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CHECK(!g_network_handler);
7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  g_network_handler = new NetworkHandler();
7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  g_network_handler->Init();
7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static
8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void NetworkHandler::Shutdown() {
8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CHECK(g_network_handler);
8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  delete g_network_handler;
8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  g_network_handler = NULL;
8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static
8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkHandler* NetworkHandler::Get() {
9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CHECK(g_network_handler)
9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      << "NetworkHandler::Get() called before Initialize()";
9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return g_network_handler;
9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static
9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool NetworkHandler::IsInitialized() {
9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return g_network_handler;
9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkStateHandler* NetworkHandler::network_state_handler() {
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return network_state_handler_.get();
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochNetworkDeviceHandler* NetworkHandler::network_device_handler() {
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return network_device_handler_.get();
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkProfileHandler* NetworkHandler::network_profile_handler() {
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return network_profile_handler_.get();
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkConfigurationHandler* NetworkHandler::network_configuration_handler() {
11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return network_configuration_handler_.get();
11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ManagedNetworkConfigurationHandler*
11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkHandler::managed_network_configuration_handler() {
11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return managed_network_configuration_handler_.get();
11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
121424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)NetworkActivationHandler* NetworkHandler::network_activation_handler() {
122424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return network_activation_handler_.get();
123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkConnectionHandler* NetworkHandler::network_connection_handler() {
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return network_connection_handler_.get();
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochNetworkSmsHandler* NetworkHandler::network_sms_handler() {
1302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  return network_sms_handler_.get();
1312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1322385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GeolocationHandler* NetworkHandler::geolocation_handler() {
13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return geolocation_handler_.get();
13590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}  // namespace chromeos
138