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

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

Issue 7298012: Consolidate data storage and notifications in the cloud policy subsystem (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 5 months 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/browser_policy_connector.h" 5 #include "chrome/browser/policy/browser_policy_connector.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "chrome/browser/net/gaia/token_service.h" 9 #include "chrome/browser/net/gaia/token_service.h"
10 #include "chrome/browser/policy/cloud_policy_data_store.h"
10 #include "chrome/browser/policy/cloud_policy_provider.h" 11 #include "chrome/browser/policy/cloud_policy_provider.h"
11 #include "chrome/browser/policy/cloud_policy_provider_impl.h" 12 #include "chrome/browser/policy/cloud_policy_provider_impl.h"
12 #include "chrome/browser/policy/cloud_policy_subsystem.h" 13 #include "chrome/browser/policy/cloud_policy_subsystem.h"
13 #include "chrome/browser/policy/configuration_policy_pref_store.h" 14 #include "chrome/browser/policy/configuration_policy_pref_store.h"
14 #include "chrome/browser/policy/configuration_policy_provider.h" 15 #include "chrome/browser/policy/configuration_policy_provider.h"
15 #include "chrome/browser/policy/dummy_cloud_policy_provider.h" 16 #include "chrome/browser/policy/dummy_cloud_policy_provider.h"
16 #include "chrome/browser/policy/dummy_configuration_policy_provider.h" 17 #include "chrome/browser/policy/dummy_configuration_policy_provider.h"
17 #include "chrome/browser/policy/user_policy_cache.h" 18 #include "chrome/browser/policy/user_policy_cache.h"
18 #include "chrome/browser/policy/user_policy_identity_strategy.h" 19 #include "chrome/browser/policy/user_policy_token_cache.h"
19 #include "chrome/common/chrome_paths.h" 20 #include "chrome/common/chrome_paths.h"
20 #include "chrome/common/chrome_switches.h" 21 #include "chrome/common/chrome_switches.h"
21 #include "chrome/common/net/gaia/gaia_constants.h" 22 #include "chrome/common/net/gaia/gaia_constants.h"
22 #include "chrome/common/pref_names.h" 23 #include "chrome/common/pref_names.h"
23 #include "content/common/notification_details.h" 24 #include "content/common/notification_details.h"
24 #include "content/common/notification_source.h" 25 #include "content/common/notification_source.h"
25 26
26 #if defined(OS_WIN) 27 #if defined(OS_WIN)
27 #include "chrome/browser/policy/configuration_policy_provider_win.h" 28 #include "chrome/browser/policy/configuration_policy_provider_win.h"
28 #elif defined(OS_MACOSX) 29 #elif defined(OS_MACOSX)
29 #include "chrome/browser/policy/configuration_policy_provider_mac.h" 30 #include "chrome/browser/policy/configuration_policy_provider_mac.h"
30 #elif defined(OS_POSIX) 31 #elif defined(OS_POSIX)
31 #include "chrome/browser/policy/config_dir_policy_provider.h" 32 #include "chrome/browser/policy/config_dir_policy_provider.h"
32 #endif 33 #endif
33 34
34 #if defined(OS_CHROMEOS) 35 #if defined(OS_CHROMEOS)
35 #include "chrome/browser/chromeos/cros/cros_library.h" 36 #include "chrome/browser/chromeos/cros/cros_library.h"
36 #include "chrome/browser/policy/device_policy_cache.h" 37 #include "chrome/browser/policy/device_policy_cache.h"
37 #include "chrome/browser/policy/device_policy_identity_strategy.h"
38 #include "content/common/notification_service.h"
39 #endif 38 #endif
40 39
41 namespace policy { 40 namespace policy {
42 41
43 namespace { 42 namespace {
44 43
45 // Subdirectory in the user's profile for storing user policies. 44 // Subdirectory in the user's profile for storing user policies.
46 const FilePath::CharType kPolicyDir[] = FILE_PATH_LITERAL("Device Management"); 45 const FilePath::CharType kPolicyDir[] = FILE_PATH_LITERAL("Device Management");
47 // File in the above directory for stroing user policy dmtokens. 46 // File in the above directory for stroing user policy dmtokens.
48 const FilePath::CharType kTokenCacheFile[] = FILE_PATH_LITERAL("Token"); 47 const FilePath::CharType kTokenCacheFile[] = FILE_PATH_LITERAL("Token");
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 managed_cloud_provider_(managed_cloud_provider), 99 managed_cloud_provider_(managed_cloud_provider),
101 recommended_cloud_provider_(recommended_cloud_provider), 100 recommended_cloud_provider_(recommended_cloud_provider),
102 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {} 101 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {}
103 102
104 BrowserPolicyConnector::~BrowserPolicyConnector() { 103 BrowserPolicyConnector::~BrowserPolicyConnector() {
105 // Shutdown device cloud policy. 104 // Shutdown device cloud policy.
106 #if defined(OS_CHROMEOS) 105 #if defined(OS_CHROMEOS)
107 if (device_cloud_policy_subsystem_.get()) 106 if (device_cloud_policy_subsystem_.get())
108 device_cloud_policy_subsystem_->Shutdown(); 107 device_cloud_policy_subsystem_->Shutdown();
109 device_cloud_policy_subsystem_.reset(); 108 device_cloud_policy_subsystem_.reset();
110 device_identity_strategy_.reset(); 109 device_data_store_.reset();
111 #endif 110 #endif
112 111
113 // Shutdown user cloud policy. 112 // Shutdown user cloud policy.
114 if (user_cloud_policy_subsystem_.get()) 113 if (user_cloud_policy_subsystem_.get())
115 user_cloud_policy_subsystem_->Shutdown(); 114 user_cloud_policy_subsystem_->Shutdown();
116 user_cloud_policy_subsystem_.reset(); 115 user_cloud_policy_subsystem_.reset();
117 user_identity_strategy_.reset(); 116 user_data_store_.reset();
117 user_policy_token_cache_ = NULL;
118 } 118 }
119 119
120 ConfigurationPolicyProvider* 120 ConfigurationPolicyProvider*
121 BrowserPolicyConnector::GetManagedPlatformProvider() const { 121 BrowserPolicyConnector::GetManagedPlatformProvider() const {
122 return managed_platform_provider_.get(); 122 return managed_platform_provider_.get();
123 } 123 }
124 124
125 ConfigurationPolicyProvider* 125 ConfigurationPolicyProvider*
126 BrowserPolicyConnector::GetManagedCloudProvider() const { 126 BrowserPolicyConnector::GetManagedCloudProvider() const {
127 return managed_cloud_provider_.get(); 127 return managed_cloud_provider_.get();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 } 174 }
175 #else 175 #else
176 return new DummyConfigurationPolicyProvider(policy_list); 176 return new DummyConfigurationPolicyProvider(policy_list);
177 #endif 177 #endif
178 } 178 }
179 179
180 void BrowserPolicyConnector::SetDeviceCredentials( 180 void BrowserPolicyConnector::SetDeviceCredentials(
181 const std::string& owner_email, 181 const std::string& owner_email,
182 const std::string& gaia_token) { 182 const std::string& gaia_token) {
183 #if defined(OS_CHROMEOS) 183 #if defined(OS_CHROMEOS)
184 if (device_identity_strategy_.get()) 184 if (device_data_store_.get()) {
185 device_identity_strategy_->SetAuthCredentials(owner_email, gaia_token); 185 device_data_store_->set_user_name(owner_email);
186 device_data_store_->SetGaiaToken(gaia_token);
187 }
186 #endif 188 #endif
187 } 189 }
188 190
189 bool BrowserPolicyConnector::IsEnterpriseManaged() { 191 bool BrowserPolicyConnector::IsEnterpriseManaged() {
190 #if defined(OS_CHROMEOS) 192 #if defined(OS_CHROMEOS)
191 return install_attributes_.get() && install_attributes_->IsEnterpriseDevice(); 193 return install_attributes_.get() && install_attributes_->IsEnterpriseDevice();
192 #else 194 #else
193 return false; 195 return false;
194 #endif 196 #endif
195 } 197 }
(...skipping 19 matching lines...) Expand all
215 217
216 void BrowserPolicyConnector::DeviceStopAutoRetry() { 218 void BrowserPolicyConnector::DeviceStopAutoRetry() {
217 #if defined(OS_CHROMEOS) 219 #if defined(OS_CHROMEOS)
218 if (device_cloud_policy_subsystem_.get()) 220 if (device_cloud_policy_subsystem_.get())
219 device_cloud_policy_subsystem_->StopAutoRetry(); 221 device_cloud_policy_subsystem_->StopAutoRetry();
220 #endif 222 #endif
221 } 223 }
222 224
223 void BrowserPolicyConnector::FetchDevicePolicy() { 225 void BrowserPolicyConnector::FetchDevicePolicy() {
224 #if defined(OS_CHROMEOS) 226 #if defined(OS_CHROMEOS)
225 if (device_identity_strategy_.get()) 227 if (device_data_store_.get()) {
226 return device_identity_strategy_->FetchPolicy(); 228 DCHECK(!device_data_store_->device_token().empty());
229 device_data_store_->NotifyDeviceTokenChanged();
230 }
227 #endif 231 #endif
228 } 232 }
229 233
230 void BrowserPolicyConnector::InitializeUserPolicy(const std::string& user_name, 234 void BrowserPolicyConnector::InitializeUserPolicy(const std::string& user_name,
231 const FilePath& policy_dir, 235 const FilePath& policy_dir,
232 TokenService* token_service) { 236 TokenService* token_service) {
233 DCHECK(token_service); 237 DCHECK(token_service);
234 238
235 // Throw away the old backend. 239 // Throw away the old backend.
236 user_cloud_policy_subsystem_.reset(); 240 user_cloud_policy_subsystem_.reset();
237 user_identity_strategy_.reset(); 241 user_data_store_.reset();
242 user_policy_token_cache_ = NULL;
238 registrar_.RemoveAll(); 243 registrar_.RemoveAll();
239 244
240 CommandLine* command_line = CommandLine::ForCurrentProcess(); 245 CommandLine* command_line = CommandLine::ForCurrentProcess();
241 if (command_line->HasSwitch(switches::kDeviceManagementUrl)) { 246 if (command_line->HasSwitch(switches::kDeviceManagementUrl)) {
242 token_service_ = token_service; 247 token_service_ = token_service;
243 registrar_.Add(this, 248 registrar_.Add(this,
244 NotificationType::TOKEN_AVAILABLE, 249 NotificationType::TOKEN_AVAILABLE,
245 Source<TokenService>(token_service_)); 250 Source<TokenService>(token_service_));
246 251
247 FilePath policy_cache_dir = policy_dir.Append(kPolicyDir); 252 FilePath policy_cache_dir = policy_dir.Append(kPolicyDir);
248 UserPolicyCache* user_policy_cache = 253 UserPolicyCache* user_policy_cache =
249 new UserPolicyCache(policy_cache_dir.Append(kPolicyCacheFile)); 254 new UserPolicyCache(policy_cache_dir.Append(kPolicyCacheFile));
255 user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
256 user_policy_token_cache_ = new UserPolicyTokenCache(
257 user_data_store_->GetWeakPtr(),
258 policy_cache_dir.Append(kTokenCacheFile));
250 259
251 // Prepending user caches meaning they will take precedence of device policy 260 // Prepending user caches meaning they will take precedence of device policy
252 // caches. 261 // caches.
253 managed_cloud_provider_->PrependCache(user_policy_cache); 262 managed_cloud_provider_->PrependCache(user_policy_cache);
254 recommended_cloud_provider_->PrependCache(user_policy_cache); 263 recommended_cloud_provider_->PrependCache(user_policy_cache);
255 user_identity_strategy_.reset(
256 new UserPolicyIdentityStrategy(
257 user_name,
258 policy_cache_dir.Append(kTokenCacheFile)));
259 user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem( 264 user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
260 user_identity_strategy_.get(), 265 user_data_store_.get(),
261 user_policy_cache)); 266 user_policy_cache));
262 267
263 // Initiate the DM-Token load. 268 // Initiate the DM-Token load.
264 user_identity_strategy_->LoadTokenCache(); 269 user_policy_token_cache_->Load();
265 270
271 user_data_store_->set_user_name(user_name);
266 if (token_service_->HasTokenForService( 272 if (token_service_->HasTokenForService(
267 GaiaConstants::kDeviceManagementService)) { 273 GaiaConstants::kDeviceManagementService)) {
268 user_identity_strategy_->SetAuthToken( 274 user_data_store_->SetGaiaToken(token_service_->GetTokenForService(
269 token_service_->GetTokenForService(
270 GaiaConstants::kDeviceManagementService)); 275 GaiaConstants::kDeviceManagementService));
271 } 276 }
272 277
273 user_cloud_policy_subsystem_->CompleteInitialization( 278 user_cloud_policy_subsystem_->CompleteInitialization(
274 prefs::kUserPolicyRefreshRate, 279 prefs::kUserPolicyRefreshRate,
275 kServiceInitializationStartupDelay); 280 kServiceInitializationStartupDelay);
276 } 281 }
277 } 282 }
278 283
279 void BrowserPolicyConnector::ScheduleServiceInitialization( 284 void BrowserPolicyConnector::ScheduleServiceInitialization(
280 int64 delay_milliseconds) { 285 int64 delay_milliseconds) {
281 if (user_cloud_policy_subsystem_.get()) { 286 if (user_cloud_policy_subsystem_.get()) {
282 user_cloud_policy_subsystem_-> 287 user_cloud_policy_subsystem_->
283 ScheduleServiceInitialization(delay_milliseconds); 288 ScheduleServiceInitialization(delay_milliseconds);
284 } 289 }
285 #if defined(OS_CHROMEOS) 290 #if defined(OS_CHROMEOS)
286 if (device_cloud_policy_subsystem_.get()) { 291 if (device_cloud_policy_subsystem_.get()) {
287 device_cloud_policy_subsystem_-> 292 device_cloud_policy_subsystem_->
288 ScheduleServiceInitialization(delay_milliseconds); 293 ScheduleServiceInitialization(delay_milliseconds);
289 } 294 }
290 #endif 295 #endif
291 } 296 }
292 297
293 void BrowserPolicyConnector::InitializeDevicePolicy() { 298 void BrowserPolicyConnector::InitializeDevicePolicy() {
294 #if defined(OS_CHROMEOS) 299 #if defined(OS_CHROMEOS)
295 // Throw away the old backend. 300 // Throw away the old backend.
296 device_cloud_policy_subsystem_.reset(); 301 device_cloud_policy_subsystem_.reset();
297 device_identity_strategy_.reset(); 302 device_data_store_.reset();
298 303
299 CommandLine* command_line = CommandLine::ForCurrentProcess(); 304 CommandLine* command_line = CommandLine::ForCurrentProcess();
300 if (command_line->HasSwitch(switches::kEnableDevicePolicy)) { 305 if (command_line->HasSwitch(switches::kEnableDevicePolicy)) {
301 device_identity_strategy_.reset(new DevicePolicyIdentityStrategy()); 306 device_data_store_.reset(CloudPolicyDataStore::CreateForDevicePolicies());
302 install_attributes_.reset(new EnterpriseInstallAttributes( 307 install_attributes_.reset(new EnterpriseInstallAttributes(
303 chromeos::CrosLibrary::Get()->GetCryptohomeLibrary())); 308 chromeos::CrosLibrary::Get()->GetCryptohomeLibrary()));
304 DevicePolicyCache* device_policy_cache = 309 DevicePolicyCache* device_policy_cache =
305 new DevicePolicyCache(device_identity_strategy_.get(), 310 new DevicePolicyCache(device_data_store_.get(),
306 install_attributes_.get()); 311 install_attributes_.get());
307 312
308 managed_cloud_provider_->AppendCache(device_policy_cache); 313 managed_cloud_provider_->AppendCache(device_policy_cache);
309 recommended_cloud_provider_->AppendCache(device_policy_cache); 314 recommended_cloud_provider_->AppendCache(device_policy_cache);
310 315
311 device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem( 316 device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
312 device_identity_strategy_.get(), 317 device_data_store_.get(),
313 device_policy_cache)); 318 device_policy_cache));
314 319
315 // Initialize the subsystem once the message loops are spinning. 320 // Initialize the subsystem once the message loops are spinning.
316 MessageLoop::current()->PostTask( 321 MessageLoop::current()->PostTask(
317 FROM_HERE, 322 FROM_HERE,
318 method_factory_.NewRunnableMethod( 323 method_factory_.NewRunnableMethod(
319 &BrowserPolicyConnector::InitializeDevicePolicySubsystem)); 324 &BrowserPolicyConnector::InitializeDevicePolicySubsystem));
320 } 325 }
321 #endif 326 #endif
322 } 327 }
(...skipping 12 matching lines...) Expand all
335 const NotificationSource& source, 340 const NotificationSource& source,
336 const NotificationDetails& details) { 341 const NotificationDetails& details) {
337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 342 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
338 if (type == NotificationType::TOKEN_AVAILABLE) { 343 if (type == NotificationType::TOKEN_AVAILABLE) {
339 const TokenService* token_source = 344 const TokenService* token_source =
340 Source<const TokenService>(source).ptr(); 345 Source<const TokenService>(source).ptr();
341 DCHECK_EQ(token_service_, token_source); 346 DCHECK_EQ(token_service_, token_source);
342 const TokenService::TokenAvailableDetails* token_details = 347 const TokenService::TokenAvailableDetails* token_details =
343 Details<const TokenService::TokenAvailableDetails>(details).ptr(); 348 Details<const TokenService::TokenAvailableDetails>(details).ptr();
344 if (token_details->service() == GaiaConstants::kDeviceManagementService) { 349 if (token_details->service() == GaiaConstants::kDeviceManagementService) {
345 if (user_identity_strategy_.get()) { 350 if (user_data_store_.get()) {
346 user_identity_strategy_->SetAuthToken(token_details->token()); 351 user_data_store_->SetGaiaToken(token_details->token());
347 } 352 }
348 } 353 }
349 } else { 354 } else {
350 NOTREACHED(); 355 NOTREACHED();
351 } 356 }
352 } 357 }
353 358
354 } // namespace 359 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/policy/browser_policy_connector.h ('k') | chrome/browser/policy/cloud_policy_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698