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

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

Issue 9911029: Refactored the CloudPolicyProvider so that it becomes initialized once and stays initialized. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Updated expectations in failing browser_tests Created 8 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
11 #include "base/path_service.h" 11 #include "base/path_service.h"
12 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/policy/cloud_policy_provider.h" 13 #include "chrome/browser/policy/cloud_policy_provider.h"
14 #include "chrome/browser/policy/cloud_policy_provider_impl.h"
15 #include "chrome/browser/policy/cloud_policy_subsystem.h" 14 #include "chrome/browser/policy/cloud_policy_subsystem.h"
16 #include "chrome/browser/policy/configuration_policy_provider.h" 15 #include "chrome/browser/policy/configuration_policy_provider.h"
17 #include "chrome/browser/policy/policy_service_impl.h" 16 #include "chrome/browser/policy/policy_service_impl.h"
18 #include "chrome/browser/policy/user_policy_cache.h" 17 #include "chrome/browser/policy/user_policy_cache.h"
19 #include "chrome/browser/policy/user_policy_token_cache.h" 18 #include "chrome/browser/policy/user_policy_token_cache.h"
20 #include "chrome/browser/signin/token_service.h" 19 #include "chrome/browser/signin/token_service.h"
21 #include "chrome/common/chrome_notification_types.h" 20 #include "chrome/common/chrome_notification_types.h"
22 #include "chrome/common/chrome_paths.h" 21 #include "chrome/common/chrome_paths.h"
23 #include "chrome/common/chrome_switches.h" 22 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/net/gaia/gaia_constants.h" 23 #include "chrome/common/net/gaia/gaia_constants.h"
25 #include "chrome/common/pref_names.h" 24 #include "chrome/common/pref_names.h"
26 #include "content/public/browser/notification_details.h" 25 #include "content/public/browser/notification_details.h"
27 #include "content/public/browser/notification_source.h" 26 #include "content/public/browser/notification_source.h"
28 #include "grit/generated_resources.h" 27 #include "grit/generated_resources.h"
29 #include "policy/policy_constants.h" 28 #include "policy/policy_constants.h"
30 29
31 #if defined(OS_WIN) 30 #if defined(OS_WIN)
32 #include "chrome/browser/policy/configuration_policy_provider_win.h" 31 #include "chrome/browser/policy/configuration_policy_provider_win.h"
33 #elif defined(OS_MACOSX) 32 #elif defined(OS_MACOSX)
34 #include "chrome/browser/policy/configuration_policy_provider_mac.h" 33 #include "chrome/browser/policy/configuration_policy_provider_mac.h"
35 #elif defined(OS_POSIX) 34 #elif defined(OS_POSIX)
36 #include "chrome/browser/policy/config_dir_policy_provider.h" 35 #include "chrome/browser/policy/config_dir_policy_provider.h"
37 #endif 36 #endif
38 37
39 #if defined(OS_CHROMEOS) 38 #if defined(OS_CHROMEOS)
40 #include "chrome/browser/chromeos/cros/cros_library.h" 39 #include "chrome/browser/chromeos/cros/cros_library.h"
40 #include "chrome/browser/chromeos/login/signed_settings_helper.h"
41 #include "chrome/browser/chromeos/system/statistics_provider.h" 41 #include "chrome/browser/chromeos/system/statistics_provider.h"
42 #include "chrome/browser/policy/app_pack_updater.h" 42 #include "chrome/browser/policy/app_pack_updater.h"
43 #include "chrome/browser/policy/device_policy_cache.h" 43 #include "chrome/browser/policy/device_policy_cache.h"
44 #include "chrome/browser/policy/network_configuration_updater.h" 44 #include "chrome/browser/policy/network_configuration_updater.h"
45 #endif 45 #endif
46 46
47 using content::BrowserThread; 47 using content::BrowserThread;
48 48
49 namespace policy { 49 namespace policy {
50 50
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 user_cloud_policy_subsystem_->Shutdown(); 104 user_cloud_policy_subsystem_->Shutdown();
105 user_cloud_policy_subsystem_.reset(); 105 user_cloud_policy_subsystem_.reset();
106 user_policy_token_cache_.reset(); 106 user_policy_token_cache_.reset();
107 user_data_store_.reset(); 107 user_data_store_.reset();
108 } 108 }
109 109
110 void BrowserPolicyConnector::Init() { 110 void BrowserPolicyConnector::Init() {
111 managed_platform_provider_.reset(CreateManagedPlatformProvider()); 111 managed_platform_provider_.reset(CreateManagedPlatformProvider());
112 recommended_platform_provider_.reset(CreateRecommendedPlatformProvider()); 112 recommended_platform_provider_.reset(CreateRecommendedPlatformProvider());
113 113
114 managed_cloud_provider_.reset(new CloudPolicyProviderImpl( 114 #if defined(OS_CHROMEOS)
115 this, 115 // The CloudPolicyProvider blocks asynchronous Profile creation until a login
116 GetChromePolicyDefinitionList(), 116 // is performed. This is used to ensure that the Profile's PrefService sees
117 POLICY_LEVEL_MANDATORY)); 117 // managed preferences on managed Chrome OS devices. However, this also
118 recommended_cloud_provider_.reset(new CloudPolicyProviderImpl( 118 // prevents creation of new Profiles in Desktop Chrome. The implementation of
119 this, 119 // cloud policy on the Desktop requires a refactoring of the cloud provider,
120 GetChromePolicyDefinitionList(), 120 // but for now it just isn't created.
121 POLICY_LEVEL_RECOMMENDED)); 121 CommandLine* command_line = CommandLine::ForCurrentProcess();
122 if (command_line->HasSwitch(switches::kDeviceManagementUrl)) {
123 managed_cloud_provider_.reset(new CloudPolicyProvider(
124 this,
125 GetChromePolicyDefinitionList(),
126 POLICY_LEVEL_MANDATORY));
127 recommended_cloud_provider_.reset(new CloudPolicyProvider(
128 this,
129 GetChromePolicyDefinitionList(),
130 POLICY_LEVEL_RECOMMENDED));
131 }
132 #endif
122 133
123 // |providers| in decreasing order of priority. 134 // |providers| in decreasing order of priority.
124 PolicyServiceImpl::Providers providers; 135 PolicyServiceImpl::Providers providers;
125 providers.push_back(managed_platform_provider_.get()); 136 if (managed_platform_provider_.get())
126 providers.push_back(managed_cloud_provider_.get()); 137 providers.push_back(managed_platform_provider_.get());
127 providers.push_back(recommended_platform_provider_.get()); 138 if (managed_cloud_provider_.get())
128 providers.push_back(recommended_cloud_provider_.get()); 139 providers.push_back(managed_cloud_provider_.get());
140 if (recommended_platform_provider_.get())
141 providers.push_back(recommended_platform_provider_.get());
142 if (recommended_cloud_provider_.get())
143 providers.push_back(recommended_cloud_provider_.get());
129 policy_service_.reset(new PolicyServiceImpl(providers)); 144 policy_service_.reset(new PolicyServiceImpl(providers));
130 145
131 #if defined(OS_CHROMEOS) 146 #if defined(OS_CHROMEOS)
132 InitializeDevicePolicy(); 147 InitializeDevicePolicy();
133 148
134 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableONCPolicy)) { 149 if (command_line->HasSwitch(switches::kEnableONCPolicy)) {
135 network_configuration_updater_.reset( 150 network_configuration_updater_.reset(
136 new NetworkConfigurationUpdater( 151 new NetworkConfigurationUpdater(
137 managed_cloud_provider_.get(), 152 managed_cloud_provider_.get(),
138 chromeos::CrosLibrary::Get()->GetNetworkLibrary())); 153 chromeos::CrosLibrary::Get()->GetNetworkLibrary()));
139 } 154 }
140 155
141 // Create the AppPackUpdater to start updating the cache. It requires the 156 // Create the AppPackUpdater to start updating the cache. It requires the
142 // system request context, which isn't available yet; therefore it is 157 // system request context, which isn't available yet; therefore it is
143 // created only once the loops are running. 158 // created only once the loops are running.
144 MessageLoop::current()->PostTask( 159 MessageLoop::current()->PostTask(
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 FilePath policy_cache_dir = policy_dir.Append(kPolicyDir); 326 FilePath policy_cache_dir = policy_dir.Append(kPolicyDir);
312 327
313 UserPolicyCache* user_policy_cache = 328 UserPolicyCache* user_policy_cache =
314 new UserPolicyCache(policy_cache_dir.Append(kPolicyCacheFile), 329 new UserPolicyCache(policy_cache_dir.Append(kPolicyCacheFile),
315 wait_for_policy_fetch); 330 wait_for_policy_fetch);
316 user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies()); 331 user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
317 user_policy_token_cache_.reset( 332 user_policy_token_cache_.reset(
318 new UserPolicyTokenCache(user_data_store_.get(), 333 new UserPolicyTokenCache(user_data_store_.get(),
319 policy_cache_dir.Append(kTokenCacheFile))); 334 policy_cache_dir.Append(kTokenCacheFile)));
320 335
321 // Prepending user caches meaning they will take precedence of device policy 336 managed_cloud_provider_->SetUserPolicyCache(user_policy_cache);
322 // caches. 337 recommended_cloud_provider_->SetUserPolicyCache(user_policy_cache);
323 managed_cloud_provider_->PrependCache(user_policy_cache);
324 recommended_cloud_provider_->PrependCache(user_policy_cache);
325 user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem( 338 user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
326 user_data_store_.get(), 339 user_data_store_.get(),
327 user_policy_cache)); 340 user_policy_cache));
328 341
329 // Initiate the DM-Token load. 342 // Initiate the DM-Token load.
330 user_policy_token_cache_->Load(); 343 user_policy_token_cache_->Load();
331 344
332 user_data_store_->set_user_name(user_name); 345 user_data_store_->set_user_name(user_name);
333 user_data_store_->set_user_affiliation(GetUserAffiliation(user_name)); 346 user_data_store_->set_user_affiliation(GetUserAffiliation(user_name));
334 347
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 device_data_store_.reset(); 459 device_data_store_.reset();
447 460
448 CommandLine* command_line = CommandLine::ForCurrentProcess(); 461 CommandLine* command_line = CommandLine::ForCurrentProcess();
449 if (command_line->HasSwitch(switches::kEnableDevicePolicy)) { 462 if (command_line->HasSwitch(switches::kEnableDevicePolicy)) {
450 device_data_store_.reset(CloudPolicyDataStore::CreateForDevicePolicies()); 463 device_data_store_.reset(CloudPolicyDataStore::CreateForDevicePolicies());
451 chromeos::CryptohomeLibrary* cryptohome = 464 chromeos::CryptohomeLibrary* cryptohome =
452 chromeos::CrosLibrary::Get()->GetCryptohomeLibrary(); 465 chromeos::CrosLibrary::Get()->GetCryptohomeLibrary();
453 install_attributes_.reset(new EnterpriseInstallAttributes(cryptohome)); 466 install_attributes_.reset(new EnterpriseInstallAttributes(cryptohome));
454 DevicePolicyCache* device_policy_cache = 467 DevicePolicyCache* device_policy_cache =
455 new DevicePolicyCache(device_data_store_.get(), 468 new DevicePolicyCache(device_data_store_.get(),
456 install_attributes_.get()); 469 install_attributes_.get(),
470 chromeos::SignedSettingsHelper::Get());
457 471
458 managed_cloud_provider_->AppendCache(device_policy_cache); 472 managed_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
459 recommended_cloud_provider_->AppendCache(device_policy_cache); 473 recommended_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
460 474
461 device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem( 475 device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
462 device_data_store_.get(), 476 device_data_store_.get(),
463 device_policy_cache)); 477 device_policy_cache));
464 478
465 // Initialize the subsystem once the message loops are spinning. 479 // Initialize the subsystem once the message loops are spinning.
466 MessageLoop::current()->PostTask( 480 MessageLoop::current()->PostTask(
467 FROM_HERE, 481 FROM_HERE,
468 base::Bind(&BrowserPolicyConnector::CompleteInitialization, 482 base::Bind(&BrowserPolicyConnector::CompleteInitialization,
469 weak_ptr_factory_.GetWeakPtr())); 483 weak_ptr_factory_.GetWeakPtr()));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 config_dir_path.Append(FILE_PATH_LITERAL("recommended"))); 569 config_dir_path.Append(FILE_PATH_LITERAL("recommended")));
556 } else { 570 } else {
557 return NULL; 571 return NULL;
558 } 572 }
559 #else 573 #else
560 return NULL; 574 return NULL;
561 #endif 575 #endif
562 } 576 }
563 577
564 } // namespace policy 578 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698