// Copyright 2013 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. #include "chrome/browser/chromeos/policy/user_network_configuration_updater.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/logging.h" #include "chrome/browser/chromeos/login/user.h" #include "chrome/browser/chromeos/net/onc_utils.h" #include "chromeos/network/managed_network_configuration_handler.h" #include "chromeos/network/onc/onc_certificate_importer.h" #include "content/public/browser/browser_thread.h" #include "net/cert/x509_certificate.h" #include "policy/policy_constants.h" namespace policy { UserNetworkConfigurationUpdater::~UserNetworkConfigurationUpdater() {} // static scoped_ptr UserNetworkConfigurationUpdater::CreateForUserPolicy( bool allow_trusted_certs_from_policy, const chromeos::User& user, scoped_ptr certificate_importer, PolicyService* policy_service, chromeos::ManagedNetworkConfigurationHandler* network_config_handler) { scoped_ptr updater( new UserNetworkConfigurationUpdater(allow_trusted_certs_from_policy, user, certificate_importer.Pass(), policy_service, network_config_handler)); updater->Init(); return updater.Pass(); } void UserNetworkConfigurationUpdater::AddTrustedCertsObserver( WebTrustedCertsObserver* observer) { observer_list_.AddObserver(observer); } void UserNetworkConfigurationUpdater::RemoveTrustedCertsObserver( WebTrustedCertsObserver* observer) { observer_list_.RemoveObserver(observer); } UserNetworkConfigurationUpdater::UserNetworkConfigurationUpdater( bool allow_trusted_certs_from_policy, const chromeos::User& user, scoped_ptr certificate_importer, PolicyService* policy_service, chromeos::ManagedNetworkConfigurationHandler* network_config_handler) : NetworkConfigurationUpdater(onc::ONC_SOURCE_USER_POLICY, key::kOpenNetworkConfiguration, certificate_importer.Pass(), policy_service, network_config_handler), allow_trusted_certificates_from_policy_(allow_trusted_certs_from_policy), user_(&user) {} void UserNetworkConfigurationUpdater::GetWebTrustedCertificates( net::CertificateList* certs) const { *certs = web_trust_certs_; } void UserNetworkConfigurationUpdater::ImportCertificates( const base::ListValue& certificates_onc) { web_trust_certs_.clear(); certificate_importer_->ImportCertificates( certificates_onc, onc_source_, allow_trusted_certificates_from_policy_ ? &web_trust_certs_ : NULL); NotifyTrustAnchorsChanged(); } void UserNetworkConfigurationUpdater::ApplyNetworkPolicy( base::ListValue* network_configs_onc, base::DictionaryValue* global_network_config) { DCHECK(user_); chromeos::onc::ExpandStringPlaceholdersInNetworksForUser(user_, network_configs_onc); network_config_handler_->SetPolicy(onc_source_, user_->username_hash(), *network_configs_onc, *global_network_config); } void UserNetworkConfigurationUpdater::NotifyTrustAnchorsChanged() { FOR_EACH_OBSERVER(WebTrustedCertsObserver, observer_list_, OnTrustAnchorsChanged(web_trust_certs_)); } } // namespace policy