user_network_configuration_updater.cc revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/chromeos/policy/user_network_configuration_updater.h" 6 7#include "base/bind.h" 8#include "base/bind_helpers.h" 9#include "base/logging.h" 10#include "chrome/browser/chromeos/login/user.h" 11#include "chrome/browser/chromeos/net/onc_utils.h" 12#include "chromeos/network/managed_network_configuration_handler.h" 13#include "chromeos/network/onc/onc_certificate_importer.h" 14#include "content/public/browser/browser_thread.h" 15#include "net/cert/x509_certificate.h" 16#include "policy/policy_constants.h" 17 18namespace policy { 19 20UserNetworkConfigurationUpdater::~UserNetworkConfigurationUpdater() {} 21 22// static 23scoped_ptr<UserNetworkConfigurationUpdater> 24UserNetworkConfigurationUpdater::CreateForUserPolicy( 25 bool allow_trusted_certs_from_policy, 26 const chromeos::User& user, 27 scoped_ptr<chromeos::onc::CertificateImporter> certificate_importer, 28 PolicyService* policy_service, 29 chromeos::ManagedNetworkConfigurationHandler* network_config_handler) { 30 scoped_ptr<UserNetworkConfigurationUpdater> updater( 31 new UserNetworkConfigurationUpdater(allow_trusted_certs_from_policy, 32 user, 33 certificate_importer.Pass(), 34 policy_service, 35 network_config_handler)); 36 updater->Init(); 37 return updater.Pass(); 38} 39 40void UserNetworkConfigurationUpdater::AddTrustedCertsObserver( 41 WebTrustedCertsObserver* observer) { 42 observer_list_.AddObserver(observer); 43} 44 45void UserNetworkConfigurationUpdater::RemoveTrustedCertsObserver( 46 WebTrustedCertsObserver* observer) { 47 observer_list_.RemoveObserver(observer); 48} 49 50UserNetworkConfigurationUpdater::UserNetworkConfigurationUpdater( 51 bool allow_trusted_certs_from_policy, 52 const chromeos::User& user, 53 scoped_ptr<chromeos::onc::CertificateImporter> certificate_importer, 54 PolicyService* policy_service, 55 chromeos::ManagedNetworkConfigurationHandler* network_config_handler) 56 : NetworkConfigurationUpdater(onc::ONC_SOURCE_USER_POLICY, 57 key::kOpenNetworkConfiguration, 58 certificate_importer.Pass(), 59 policy_service, 60 network_config_handler), 61 allow_trusted_certificates_from_policy_(allow_trusted_certs_from_policy), 62 user_(&user) {} 63 64void UserNetworkConfigurationUpdater::GetWebTrustedCertificates( 65 net::CertificateList* certs) const { 66 *certs = web_trust_certs_; 67} 68 69void UserNetworkConfigurationUpdater::ImportCertificates( 70 const base::ListValue& certificates_onc) { 71 web_trust_certs_.clear(); 72 certificate_importer_->ImportCertificates( 73 certificates_onc, 74 onc_source_, 75 allow_trusted_certificates_from_policy_ ? &web_trust_certs_ : NULL); 76 77 NotifyTrustAnchorsChanged(); 78} 79 80void UserNetworkConfigurationUpdater::ApplyNetworkPolicy( 81 base::ListValue* network_configs_onc, 82 base::DictionaryValue* global_network_config) { 83 DCHECK(user_); 84 chromeos::onc::ExpandStringPlaceholdersInNetworksForUser(user_, 85 network_configs_onc); 86 network_config_handler_->SetPolicy(onc_source_, 87 user_->username_hash(), 88 *network_configs_onc, 89 *global_network_config); 90} 91 92void UserNetworkConfigurationUpdater::NotifyTrustAnchorsChanged() { 93 FOR_EACH_OBSERVER(WebTrustedCertsObserver, 94 observer_list_, 95 OnTrustAnchorsChanged(web_trust_certs_)); 96} 97 98} // namespace policy 99