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" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/network/network_device_handler_impl.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()); 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) network_device_handler_.reset(new NetworkDeviceHandlerImpl()); 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(); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) network_device_handler_->Init(network_state_handler_.get()); 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) network_profile_handler_->Init(); 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) network_configuration_handler_->Init(network_state_handler_.get()); 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) managed_network_configuration_handler_->Init( 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) network_state_handler_.get(), 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) network_profile_handler_.get(), 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_configuration_handler_.get(), 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_device_handler_.get()); 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_connection_handler_->Init( 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_state_handler_.get(), 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_configuration_handler_.get(), 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) managed_network_configuration_handler_.get()); 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (network_cert_migrator_) 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) network_cert_migrator_->Init(network_state_handler_.get()); 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (client_cert_resolver_) { 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) client_cert_resolver_->Init(network_state_handler_.get(), 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) managed_network_configuration_handler_.get()); 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 742385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch network_sms_handler_->Init(); 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) geolocation_handler_->Init(); 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void NetworkHandler::Initialize() { 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CHECK(!g_network_handler); 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) g_network_handler = new NetworkHandler(); 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) g_network_handler->Init(); 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void NetworkHandler::Shutdown() { 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CHECK(g_network_handler); 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) delete g_network_handler; 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) g_network_handler = NULL; 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkHandler* NetworkHandler::Get() { 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CHECK(g_network_handler) 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "NetworkHandler::Get() called before Initialize()"; 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return g_network_handler; 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// static 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool NetworkHandler::IsInitialized() { 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return g_network_handler; 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkStateHandler* NetworkHandler::network_state_handler() { 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return network_state_handler_.get(); 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochNetworkDeviceHandler* NetworkHandler::network_device_handler() { 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return network_device_handler_.get(); 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkProfileHandler* NetworkHandler::network_profile_handler() { 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return network_profile_handler_.get(); 11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkConfigurationHandler* NetworkHandler::network_configuration_handler() { 11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return network_configuration_handler_.get(); 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)ManagedNetworkConfigurationHandler* 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkHandler::managed_network_configuration_handler() { 12290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return managed_network_configuration_handler_.get(); 12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)NetworkActivationHandler* NetworkHandler::network_activation_handler() { 126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return network_activation_handler_.get(); 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)NetworkConnectionHandler* NetworkHandler::network_connection_handler() { 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return network_connection_handler_.get(); 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen MurdochNetworkSmsHandler* NetworkHandler::network_sms_handler() { 1342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch return network_sms_handler_.get(); 1352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} 1362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)GeolocationHandler* NetworkHandler::geolocation_handler() { 13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return geolocation_handler_.get(); 13990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 14190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace chromeos 142