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_factory.h" 6 7 #include "base/memory/singleton.h" 8 #include "chrome/browser/chromeos/policy/user_network_configuration_updater.h" 9 #include "chrome/browser/chromeos/profiles/profile_helper.h" 10 #include "chrome/browser/policy/profile_policy_connector.h" 11 #include "chrome/browser/policy/profile_policy_connector_factory.h" 12 #include "chrome/browser/profiles/incognito_helpers.h" 13 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/common/pref_names.h" 15 #include "chromeos/network/network_handler.h" 16 #include "components/keyed_service/content/browser_context_dependency_manager.h" 17 #include "components/policy/core/common/cloud/cloud_policy_constants.h" 18 #include "components/user_manager/user.h" 19 #include "components/user_manager/user_manager.h" 20 #include "components/user_manager/user_type.h" 21 22 namespace policy { 23 24 // static 25 UserNetworkConfigurationUpdater* 26 UserNetworkConfigurationUpdaterFactory::GetForProfile(Profile* profile) { 27 return static_cast<UserNetworkConfigurationUpdater*>( 28 GetInstance()->GetServiceForBrowserContext(profile, true)); 29 } 30 31 // static 32 UserNetworkConfigurationUpdaterFactory* 33 UserNetworkConfigurationUpdaterFactory::GetInstance() { 34 return Singleton<UserNetworkConfigurationUpdaterFactory>::get(); 35 } 36 37 UserNetworkConfigurationUpdaterFactory::UserNetworkConfigurationUpdaterFactory() 38 : BrowserContextKeyedServiceFactory( 39 "UserNetworkConfigurationUpdater", 40 BrowserContextDependencyManager::GetInstance()) { 41 DependsOn(ProfilePolicyConnectorFactory::GetInstance()); 42 } 43 44 UserNetworkConfigurationUpdaterFactory:: 45 ~UserNetworkConfigurationUpdaterFactory() {} 46 47 content::BrowserContext* 48 UserNetworkConfigurationUpdaterFactory::GetBrowserContextToUse( 49 content::BrowserContext* context) const { 50 return chrome::GetBrowserContextRedirectedInIncognito(context); 51 } 52 53 bool 54 UserNetworkConfigurationUpdaterFactory::ServiceIsCreatedWithBrowserContext() 55 const { 56 return true; 57 } 58 59 bool UserNetworkConfigurationUpdaterFactory::ServiceIsNULLWhileTesting() const { 60 return true; 61 } 62 63 KeyedService* UserNetworkConfigurationUpdaterFactory::BuildServiceInstanceFor( 64 content::BrowserContext* context) const { 65 Profile* profile = static_cast<Profile*>(context); 66 if (chromeos::ProfileHelper::IsSigninProfile(profile)) 67 return NULL; // On the login screen only device network policies apply. 68 69 user_manager::User* user = 70 chromeos::ProfileHelper::Get()->GetUserByProfile(profile); 71 DCHECK(user); 72 // Currently, only the network policy of the primary user is supported. See 73 // also http://crbug.com/310685 . 74 if (user != user_manager::UserManager::Get()->GetPrimaryUser()) 75 return NULL; 76 77 const bool allow_trusted_certs_from_policy = 78 user->GetType() == user_manager::USER_TYPE_REGULAR; 79 80 ProfilePolicyConnector* profile_connector = 81 ProfilePolicyConnectorFactory::GetForProfile(profile); 82 83 return UserNetworkConfigurationUpdater::CreateForUserPolicy( 84 profile, 85 allow_trusted_certs_from_policy, 86 *user, 87 profile_connector->policy_service(), 88 chromeos::NetworkHandler::Get()->managed_network_configuration_handler()) 89 .release(); 90 } 91 92 } // namespace policy 93