| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |