Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: chrome/browser/policy/profile_policy_connector.cc

Issue 60823003: Introduced a ForwardingPolicyProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, fixes Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/policy/profile_policy_connector.h" 5 #include "chrome/browser/policy/profile_policy_connector.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/policy/browser_policy_connector.h" 11 #include "chrome/browser/policy/browser_policy_connector.h"
12 #include "chrome/browser/policy/cloud/cloud_policy_manager.h" 12 #include "chrome/browser/policy/cloud/cloud_policy_manager.h"
13 #include "chrome/browser/policy/configuration_policy_provider.h" 13 #include "chrome/browser/policy/configuration_policy_provider.h"
14 #include "chrome/browser/policy/policy_service.h" 14 #include "chrome/browser/policy/forwarding_policy_provider.h"
15 #include "chrome/browser/policy/policy_service_impl.h"
15 #include "chrome/browser/policy/schema_registry_service.h" 16 #include "chrome/browser/policy/schema_registry_service.h"
16 #include "chrome/browser/policy/schema_registry_service_factory.h" 17 #include "chrome/browser/policy/schema_registry_service_factory.h"
18 #include "chrome/browser/profiles/profile.h"
17 19
18 #if defined(OS_CHROMEOS) 20 #if defined(OS_CHROMEOS)
19 #include "base/bind.h" 21 #include "base/bind.h"
20 #include "base/prefs/pref_service.h" 22 #include "base/prefs/pref_service.h"
21 #include "chrome/browser/chromeos/login/user.h" 23 #include "chrome/browser/chromeos/login/user.h"
22 #include "chrome/browser/chromeos/login/user_manager.h" 24 #include "chrome/browser/chromeos/login/user_manager.h"
23 #include "chrome/browser/chromeos/policy/device_local_account_policy_provider.h" 25 #include "chrome/browser/chromeos/policy/device_local_account_policy_provider.h"
24 #include "chrome/browser/chromeos/policy/login_profile_policy_provider.h" 26 #include "chrome/browser/chromeos/policy/login_profile_policy_provider.h"
25 #include "chrome/browser/policy/policy_service.h"
26 #include "chrome/common/pref_names.h" 27 #include "chrome/common/pref_names.h"
27 #endif 28 #endif
28 29
29 namespace policy { 30 namespace policy {
30 31
31 ProfilePolicyConnector::ProfilePolicyConnector(Profile* profile) 32 ProfilePolicyConnector::ProfilePolicyConnector(Profile* profile)
32 : 33 :
33 #if defined(OS_CHROMEOS) 34 #if defined(OS_CHROMEOS)
34 is_primary_user_(false), 35 is_primary_user_(false),
35 weak_ptr_factory_(this), 36 weak_ptr_factory_(this),
36 #endif 37 #endif
37 profile_(profile) {} 38 profile_(profile) {}
38 39
39 ProfilePolicyConnector::~ProfilePolicyConnector() {} 40 ProfilePolicyConnector::~ProfilePolicyConnector() {}
40 41
41 void ProfilePolicyConnector::Init( 42 void ProfilePolicyConnector::Init(
42 bool force_immediate_load, 43 bool force_immediate_load,
43 #if defined(OS_CHROMEOS) 44 #if defined(OS_CHROMEOS)
44 const chromeos::User* user, 45 const chromeos::User* user,
45 #endif 46 #endif
46 CloudPolicyManager* user_cloud_policy_manager) { 47 CloudPolicyManager* user_cloud_policy_manager) {
48 // |providers| contains a list of the policy providers available for the
49 // PolicyService of this connector, in decreasing order of priority.
50 //
51 // Note: all the providers appended to this vector must eventually become
52 // initialized for every policy domain, otherwise some subsystems will never
53 // use the policies exposed by the PolicyService!
54 // The default ConfigurationPolicyProvider::IsInitializationComplete()
55 // result is true, so take care if a provider overrides that.
56 std::vector<ConfigurationPolicyProvider*> providers;
57
47 BrowserPolicyConnector* connector = 58 BrowserPolicyConnector* connector =
48 g_browser_process->browser_policy_connector(); 59 g_browser_process->browser_policy_connector();
49 // |providers| contains a list of the policy providers available for the 60 forwarding_policy_provider_.reset(
50 // PolicyService of this connector. 61 new ForwardingPolicyProvider(connector->GetPlatformProvider()));
51 std::vector<ConfigurationPolicyProvider*> providers; 62 forwarding_policy_provider_->Init(
63 SchemaRegistryServiceFactory::GetForContext(profile_));
64 providers.push_back(forwarding_policy_provider_.get());
52 65
53 if (user_cloud_policy_manager) 66 if (user_cloud_policy_manager)
54 providers.push_back(user_cloud_policy_manager); 67 providers.push_back(user_cloud_policy_manager);
55 68
56 #if defined(OS_CHROMEOS) 69 #if defined(OS_CHROMEOS)
57 if (!user) { 70 if (!user) {
58 // This case occurs for the signin profile. 71 // This case occurs for the signin profile.
59 special_user_policy_provider_.reset( 72 special_user_policy_provider_.reset(
60 new LoginProfilePolicyProvider(connector->GetPolicyService())); 73 new LoginProfilePolicyProvider(connector->GetPolicyService()));
61 special_user_policy_provider_->Init( 74 special_user_policy_provider_->Init(
62 SchemaRegistryServiceFactory::GetForContext(profile_)); 75 SchemaRegistryServiceFactory::GetForContext(profile_));
63 } else { 76 } else {
64 // |user| should never be NULL except for the signin profile. 77 // |user| should never be NULL except for the signin profile.
65 is_primary_user_ = user == chromeos::UserManager::Get()->GetPrimaryUser(); 78 is_primary_user_ = user == chromeos::UserManager::Get()->GetPrimaryUser();
66 if (user->GetType() == chromeos::User::USER_TYPE_PUBLIC_ACCOUNT) 79 if (user->GetType() == chromeos::User::USER_TYPE_PUBLIC_ACCOUNT)
67 InitializeDeviceLocalAccountPolicyProvider(user->email()); 80 InitializeDeviceLocalAccountPolicyProvider(user->email());
68 } 81 }
69 if (special_user_policy_provider_) 82 if (special_user_policy_provider_)
70 providers.push_back(special_user_policy_provider_.get()); 83 providers.push_back(special_user_policy_provider_.get());
71 #endif 84 #endif
72 85
73 policy_service_ = connector->CreatePolicyService(providers); 86 policy_service_.reset(new PolicyServiceImpl(providers));
74 87
75 #if defined(OS_CHROMEOS) 88 #if defined(OS_CHROMEOS)
76 if (is_primary_user_) { 89 if (is_primary_user_) {
77 if (user_cloud_policy_manager) 90 if (user_cloud_policy_manager)
78 connector->SetUserPolicyDelegate(user_cloud_policy_manager); 91 connector->SetUserPolicyDelegate(user_cloud_policy_manager);
79 else if (special_user_policy_provider_) 92 else if (special_user_policy_provider_)
80 connector->SetUserPolicyDelegate(special_user_policy_provider_.get()); 93 connector->SetUserPolicyDelegate(special_user_policy_provider_.get());
81 } 94 }
82 #endif 95 #endif
83 } 96 }
84 97
85 void ProfilePolicyConnector::InitForTesting(scoped_ptr<PolicyService> service) { 98 void ProfilePolicyConnector::InitForTesting(scoped_ptr<PolicyService> service) {
86 policy_service_ = service.Pass(); 99 policy_service_ = service.Pass();
87 } 100 }
88 101
89 void ProfilePolicyConnector::Shutdown() { 102 void ProfilePolicyConnector::Shutdown() {
90 #if defined(OS_CHROMEOS) 103 #if defined(OS_CHROMEOS)
91 if (is_primary_user_) 104 if (is_primary_user_)
92 g_browser_process->browser_policy_connector()->SetUserPolicyDelegate(NULL); 105 g_browser_process->browser_policy_connector()->SetUserPolicyDelegate(NULL);
93 if (special_user_policy_provider_) 106 if (special_user_policy_provider_)
94 special_user_policy_provider_->Shutdown(); 107 special_user_policy_provider_->Shutdown();
95 #endif 108 #endif
109 if (forwarding_policy_provider_)
110 forwarding_policy_provider_->Shutdown();
96 } 111 }
97 112
98 #if defined(OS_CHROMEOS) 113 #if defined(OS_CHROMEOS)
99 base::Closure ProfilePolicyConnector::GetPolicyCertTrustedCallback() { 114 base::Closure ProfilePolicyConnector::GetPolicyCertTrustedCallback() {
100 return base::Bind(&ProfilePolicyConnector::SetUsedPolicyCertificatesOnce, 115 return base::Bind(&ProfilePolicyConnector::SetUsedPolicyCertificatesOnce,
101 weak_ptr_factory_.GetWeakPtr()); 116 weak_ptr_factory_.GetWeakPtr());
102 } 117 }
103 #endif 118 #endif
104 119
105 bool ProfilePolicyConnector::UsedPolicyCertificates() { 120 bool ProfilePolicyConnector::UsedPolicyCertificates() {
(...skipping 18 matching lines...) Expand all
124 if (!device_local_account_policy_service) 139 if (!device_local_account_policy_service)
125 return; 140 return;
126 special_user_policy_provider_.reset(new DeviceLocalAccountPolicyProvider( 141 special_user_policy_provider_.reset(new DeviceLocalAccountPolicyProvider(
127 username, device_local_account_policy_service)); 142 username, device_local_account_policy_service));
128 special_user_policy_provider_->Init( 143 special_user_policy_provider_->Init(
129 SchemaRegistryServiceFactory::GetForContext(profile_)); 144 SchemaRegistryServiceFactory::GetForContext(profile_));
130 } 145 }
131 #endif 146 #endif
132 147
133 } // namespace policy 148 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698