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

Unified Diff: chrome/browser/policy/browser_policy_connector.cc

Issue 10449071: Enable user policy handling through the new cloud policy stack. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/policy/browser_policy_connector.h ('k') | chrome/browser/policy/cloud_policy_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/policy/browser_policy_connector.cc
diff --git a/chrome/browser/policy/browser_policy_connector.cc b/chrome/browser/policy/browser_policy_connector.cc
index 4c1967b390c738dbc5bfff9b2850052d0443567e..bc2258d783b1c349d86b194a07eab8376be2c6dd 100644
--- a/chrome/browser/policy/browser_policy_connector.cc
+++ b/chrome/browser/policy/browser_policy_connector.cc
@@ -10,10 +10,14 @@
#include "base/file_path.h"
#include "base/path_service.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/policy/cloud_policy_client.h"
#include "chrome/browser/policy/cloud_policy_provider.h"
+#include "chrome/browser/policy/cloud_policy_service.h"
#include "chrome/browser/policy/cloud_policy_subsystem.h"
#include "chrome/browser/policy/configuration_policy_provider.h"
+#include "chrome/browser/policy/device_management_service.h"
#include "chrome/browser/policy/policy_service_impl.h"
+#include "chrome/browser/policy/user_cloud_policy_manager.h"
#include "chrome/browser/policy/user_policy_cache.h"
#include "chrome/browser/policy/user_policy_token_cache.h"
#include "chrome/browser/signin/token_service.h"
@@ -106,13 +110,11 @@ BrowserPolicyConnector::~BrowserPolicyConnector() {
user_policy_token_cache_.reset();
user_data_store_.reset();
- // Delete the providers while the |handler_list_| is still valid, since
- // OnProviderGoingAway() can trigger refreshes at the
- // ConfigurationPolicyPrefStore.
- recommended_cloud_provider_.reset();
- managed_cloud_provider_.reset();
- recommended_platform_provider_.reset();
- managed_platform_provider_.reset();
+ if (user_cloud_policy_manager_.get())
+ user_cloud_policy_manager_->Shutdown();
+ user_cloud_policy_manager_.reset();
+
+ device_management_service_.reset();
}
void BrowserPolicyConnector::Init() {
@@ -128,14 +130,19 @@ void BrowserPolicyConnector::Init() {
// but for now it just isn't created.
CommandLine* command_line = CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kDeviceManagementUrl)) {
- managed_cloud_provider_.reset(new CloudPolicyProvider(
- this,
- GetChromePolicyDefinitionList(),
- POLICY_LEVEL_MANDATORY));
- recommended_cloud_provider_.reset(new CloudPolicyProvider(
- this,
- GetChromePolicyDefinitionList(),
- POLICY_LEVEL_RECOMMENDED));
+ device_management_service_.reset(
+ new DeviceManagementService(
+ command_line->GetSwitchValueASCII(switches::kDeviceManagementUrl)));
+ if (!command_line->HasSwitch(switches::kEnableCloudPolicyService)) {
+ managed_cloud_provider_.reset(new CloudPolicyProvider(
+ this,
+ GetChromePolicyDefinitionList(),
+ POLICY_LEVEL_MANDATORY));
+ recommended_cloud_provider_.reset(new CloudPolicyProvider(
+ this,
+ GetChromePolicyDefinitionList(),
+ POLICY_LEVEL_RECOMMENDED));
+ }
}
InitializeDevicePolicy();
@@ -151,7 +158,7 @@ void BrowserPolicyConnector::Init() {
}
PolicyService* BrowserPolicyConnector::CreatePolicyService(
- Profile* profile) const {
+ Profile* profile) {
// |providers| in decreasing order of priority.
PolicyServiceImpl::Providers providers;
if (managed_platform_provider_.get())
@@ -162,6 +169,18 @@ PolicyService* BrowserPolicyConnector::CreatePolicyService(
providers.push_back(recommended_platform_provider_.get());
if (recommended_cloud_provider_.get())
providers.push_back(recommended_cloud_provider_.get());
+
+ // The global policy service uses the proxy provider to allow for swapping in
+ // user policy after startup, while profiles use |user_cloud_policy_manager_|
+ // directly as their provider, which may also block initialization on a policy
+ // fetch at login time.
+ if (profile) {
+ if (user_cloud_policy_manager_.get())
+ providers.push_back(user_cloud_policy_manager_.get());
+ } else {
+ providers.push_back(&user_cloud_policy_provider_);
+ }
+
return new PolicyServiceImpl(providers);
}
@@ -260,6 +279,8 @@ void BrowserPolicyConnector::FetchCloudPolicy() {
void BrowserPolicyConnector::ScheduleServiceInitialization(
int64 delay_milliseconds) {
+ if (device_management_service_.get())
+ device_management_service_->ScheduleInitialization(delay_milliseconds);
if (user_cloud_policy_subsystem_.get()) {
user_cloud_policy_subsystem_->
ScheduleServiceInitialization(delay_milliseconds);
@@ -275,6 +296,8 @@ void BrowserPolicyConnector::InitializeUserPolicy(
const std::string& user_name,
bool wait_for_policy_fetch) {
// Throw away the old backend.
+ user_cloud_policy_manager_.reset();
+
user_cloud_policy_subsystem_.reset();
user_policy_token_cache_.reset();
user_data_store_.reset();
@@ -284,51 +307,65 @@ void BrowserPolicyConnector::InitializeUserPolicy(
CommandLine* command_line = CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kDeviceManagementUrl)) {
- user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
+ int64 startup_delay =
+ wait_for_policy_fetch ? 0 : kServiceInitializationStartupDelay;
- FilePath profile_dir;
- PathService::Get(chrome::DIR_USER_DATA, &profile_dir);
+ if (command_line->HasSwitch(switches::kEnableCloudPolicyService)) {
#if defined(OS_CHROMEOS)
- profile_dir = profile_dir.Append(
- command_line->GetSwitchValuePath(switches::kLoginProfile));
+ user_cloud_policy_manager_ =
+ UserCloudPolicyManager::Create(wait_for_policy_fetch);
+ user_cloud_policy_manager_->Initialize(g_browser_process->local_state(),
+ device_management_service_.get(),
+ GetUserAffiliation(user_name));
+ user_cloud_policy_provider_.SetDelegate(user_cloud_policy_manager_.get());
+
+ device_management_service_->ScheduleInitialization(startup_delay);
#endif
- const FilePath policy_dir = profile_dir.Append(kPolicyDir);
- const FilePath policy_cache_file = policy_dir.Append(kPolicyCacheFile);
- const FilePath token_cache_file = policy_dir.Append(kTokenCacheFile);
- CloudPolicyCacheBase* user_policy_cache = NULL;
+ } else {
+ FilePath profile_dir;
+ PathService::Get(chrome::DIR_USER_DATA, &profile_dir);
+#if defined(OS_CHROMEOS)
+ profile_dir = profile_dir.Append(
+ command_line->GetSwitchValuePath(switches::kLoginProfile));
+#endif
+ const FilePath policy_dir = profile_dir.Append(kPolicyDir);
+ const FilePath policy_cache_file = policy_dir.Append(kPolicyCacheFile);
+ const FilePath token_cache_file = policy_dir.Append(kTokenCacheFile);
+ CloudPolicyCacheBase* user_policy_cache = NULL;
+ user_data_store_.reset(CloudPolicyDataStore::CreateForUserPolicies());
#if defined(OS_CHROMEOS)
- user_policy_cache =
- new CrosUserPolicyCache(
- chromeos::DBusThreadManager::Get()->GetSessionManagerClient(),
- user_data_store_.get(),
- wait_for_policy_fetch,
- token_cache_file,
- policy_cache_file);
+ user_policy_cache =
+ new CrosUserPolicyCache(
+ chromeos::DBusThreadManager::Get()->GetSessionManagerClient(),
+ user_data_store_.get(),
+ wait_for_policy_fetch,
+ token_cache_file,
+ policy_cache_file);
#else
- user_policy_cache = new UserPolicyCache(policy_cache_file,
- wait_for_policy_fetch);
- user_policy_token_cache_.reset(
- new UserPolicyTokenCache(user_data_store_.get(), token_cache_file));
+ user_policy_cache = new UserPolicyCache(policy_cache_file,
+ wait_for_policy_fetch);
+ user_policy_token_cache_.reset(
+ new UserPolicyTokenCache(user_data_store_.get(), token_cache_file));
- // Initiate the DM-Token load.
- user_policy_token_cache_->Load();
+ // Initiate the DM-Token load.
+ user_policy_token_cache_->Load();
#endif
- managed_cloud_provider_->SetUserPolicyCache(user_policy_cache);
- recommended_cloud_provider_->SetUserPolicyCache(user_policy_cache);
- user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
- user_data_store_.get(),
- user_policy_cache));
+ user_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
+ user_data_store_.get(),
+ user_policy_cache));
- user_data_store_->set_user_name(user_name);
- user_data_store_->set_user_affiliation(GetUserAffiliation(user_name));
+ user_data_store_->set_user_name(user_name);
+ user_data_store_->set_user_affiliation(GetUserAffiliation(user_name));
- int64 delay =
- wait_for_policy_fetch ? 0 : kServiceInitializationStartupDelay;
- user_cloud_policy_subsystem_->CompleteInitialization(
- prefs::kUserPolicyRefreshRate,
- delay);
+ user_cloud_policy_subsystem_->CompleteInitialization(
+ prefs::kUserPolicyRefreshRate,
+ startup_delay);
+
+ managed_cloud_provider_->SetUserPolicyCache(user_policy_cache);
+ recommended_cloud_provider_->SetUserPolicyCache(user_policy_cache);
+ }
}
}
@@ -360,6 +397,17 @@ void BrowserPolicyConnector::RegisterForUserPolicy(
if (user_data_store_.get())
user_data_store_->SetOAuthToken(oauth_token);
}
+ if (user_cloud_policy_manager_.get()) {
+ CloudPolicyService* service =
+ user_cloud_policy_manager_->cloud_policy_service();
+ if (service->client() &&
+ !service->client()->is_registered() &&
+ !oauth_token.empty()) {
+ service->client()->Register(oauth_token);
+ } else {
+ user_cloud_policy_manager_->CancelWaitForPolicyFetch();
+ }
+ }
}
CloudPolicyDataStore* BrowserPolicyConnector::GetDeviceCloudPolicyDataStore() {
@@ -439,26 +487,31 @@ void BrowserPolicyConnector::InitializeDevicePolicy() {
CommandLine* command_line = CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kEnableDevicePolicy)) {
- device_data_store_.reset(CloudPolicyDataStore::CreateForDevicePolicies());
- chromeos::CryptohomeLibrary* cryptohome =
- chromeos::CrosLibrary::Get()->GetCryptohomeLibrary();
- install_attributes_.reset(new EnterpriseInstallAttributes(cryptohome));
- DevicePolicyCache* device_policy_cache =
- new DevicePolicyCache(device_data_store_.get(),
- install_attributes_.get());
-
- managed_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
- recommended_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
-
- device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
- device_data_store_.get(),
- device_policy_cache));
-
- // Initialize the subsystem once the message loops are spinning.
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&BrowserPolicyConnector::CompleteInitialization,
- weak_ptr_factory_.GetWeakPtr()));
+ if (command_line->HasSwitch(switches::kEnableCloudPolicyService)) {
+ // TODO(mnissler): Initialize new-style device policy here once it's
+ // implemented.
+ } else {
+ device_data_store_.reset(CloudPolicyDataStore::CreateForDevicePolicies());
+ chromeos::CryptohomeLibrary* cryptohome =
+ chromeos::CrosLibrary::Get()->GetCryptohomeLibrary();
+ install_attributes_.reset(new EnterpriseInstallAttributes(cryptohome));
+ DevicePolicyCache* device_policy_cache =
+ new DevicePolicyCache(device_data_store_.get(),
+ install_attributes_.get());
+
+ managed_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
+ recommended_cloud_provider_->SetDevicePolicyCache(device_policy_cache);
+
+ device_cloud_policy_subsystem_.reset(new CloudPolicySubsystem(
+ device_data_store_.get(),
+ device_policy_cache));
+
+ // Initialize the subsystem once the message loops are spinning.
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&BrowserPolicyConnector::CompleteInitialization,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
}
#endif
}
« no previous file with comments | « chrome/browser/policy/browser_policy_connector.h ('k') | chrome/browser/policy/cloud_policy_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698