Chromium Code Reviews| Index: chrome/browser/chromeos/policy/device_local_account_policy_provider.cc |
| diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_provider.cc b/chrome/browser/chromeos/policy/device_local_account_policy_provider.cc |
| index b6ed507a79977fdf3f5974d2b409557771c4edd9..837eb99e57bfea1b50bb9ab3486e29e2427d7b80 100644 |
| --- a/chrome/browser/chromeos/policy/device_local_account_policy_provider.cc |
| +++ b/chrome/browser/chromeos/policy/device_local_account_policy_provider.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/chromeos/policy/device_local_account_policy_provider.h" |
| #include "base/bind.h" |
| +#include "base/command_line.h" |
| #include "base/values.h" |
| #include "chrome/browser/chromeos/policy/device_local_account.h" |
| #include "chrome/browser/chromeos/policy/device_local_account_external_data_manager.h" |
| @@ -14,6 +15,9 @@ |
| #include "components/policy/core/common/policy_bundle.h" |
| #include "components/policy/core/common/policy_map.h" |
| #include "components/policy/core/common/policy_namespace.h" |
| +#include "components/policy/core/common/policy_switches.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "net/url_request/url_request_context_getter.h" |
| #include "policy/policy_constants.h" |
| namespace policy { |
| @@ -94,10 +98,19 @@ DeviceLocalAccountPolicyProvider::Create( |
| return provider.Pass(); |
| } |
| +void DeviceLocalAccountPolicyProvider::Init(SchemaRegistry* schema_registry) { |
| + ConfigurationPolicyProvider::Init(schema_registry); |
| + MaybeCreateComponentPolicyService(); |
| +} |
| + |
| bool DeviceLocalAccountPolicyProvider::IsInitializationComplete( |
| PolicyDomain domain) const { |
| if (domain == POLICY_DOMAIN_CHROME) |
| return store_initialized_; |
| + if (ComponentCloudPolicyService::SupportsDomain(domain) && |
| + component_policy_service_) { |
| + return component_policy_service_->is_initialized(); |
|
bartfab (slow)
2014/06/20 09:17:25
Is it correct for this method to return |true| if
Joao da Silva
2014/06/20 11:48:45
Good observation. In the next CL the component_pol
|
| + } |
| return true; |
| } |
| @@ -113,13 +126,34 @@ void DeviceLocalAccountPolicyProvider::RefreshPolicies() { |
| } |
| } |
| +void DeviceLocalAccountPolicyProvider::Shutdown() { |
| + component_policy_service_.reset(); |
| + ConfigurationPolicyProvider::Shutdown(); |
| +} |
| + |
| void DeviceLocalAccountPolicyProvider::OnPolicyUpdated( |
| const std::string& user_id) { |
| - if (user_id == user_id_) |
| + if (user_id == user_id_) { |
| + MaybeCreateComponentPolicyService(); |
| UpdateFromBroker(); |
| + } |
| } |
| void DeviceLocalAccountPolicyProvider::OnDeviceLocalAccountsChanged() { |
| + MaybeCreateComponentPolicyService(); |
| + UpdateFromBroker(); |
| +} |
| + |
| +void DeviceLocalAccountPolicyProvider::OnBrokerShutdown( |
| + DeviceLocalAccountPolicyBroker* broker) { |
| + if (broker->user_id() == user_id_) { |
| + // The |component_policy_service_| relies on the broker's CloudPolicyCore, |
|
bartfab (slow)
2014/06/20 09:17:24
Nit: s/broker/|broker|/
Joao da Silva
2014/06/20 11:48:45
Obsolete in the next CL.
|
| + // so destroy it if the broker is going away. |
|
bartfab (slow)
2014/06/20 09:17:25
Nit: s/broker/|broker|/
Joao da Silva
2014/06/20 11:48:45
Same
|
| + component_policy_service_.reset(); |
| + } |
| +} |
| + |
| +void DeviceLocalAccountPolicyProvider::OnComponentCloudPolicyUpdated() { |
| UpdateFromBroker(); |
| } |
| @@ -153,6 +187,9 @@ void DeviceLocalAccountPolicyProvider::UpdateFromBroker() { |
| bundle->CopyFrom(policies()); |
| } |
| + if (component_policy_service_) |
| + bundle->MergeFrom(component_policy_service_->policy()); |
| + |
| // Apply overrides. |
| if (chrome_policy_overrides_) { |
| PolicyMap& chrome_policy = |
| @@ -169,4 +206,35 @@ void DeviceLocalAccountPolicyProvider::UpdateFromBroker() { |
| UpdatePolicy(bundle.Pass()); |
| } |
| +void DeviceLocalAccountPolicyProvider::MaybeCreateComponentPolicyService() { |
| + if (component_policy_service_) |
| + return; // Already started. |
| + |
| + if (CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kDisableComponentCloudPolicy)) { |
| + // Disabled via the command line. |
| + return; |
| + } |
| + |
| + DeviceLocalAccountPolicyBroker* broker = GetBroker(); |
| + if (!broker || !schema_registry()) |
| + return; // Missing broker or not initialized yet. |
| + |
| + scoped_ptr<ResourceCache> resource_cache( |
| + new ResourceCache(broker->GetComponentPolicyCachePath(), |
| + content::BrowserThread::GetMessageLoopProxyForThread( |
| + content::BrowserThread::FILE))); |
| + |
| + component_policy_service_.reset(new ComponentCloudPolicyService( |
| + this, |
| + schema_registry(), |
| + broker->core(), |
| + resource_cache.Pass(), |
| + service_->request_context(), |
| + content::BrowserThread::GetMessageLoopProxyForThread( |
| + content::BrowserThread::FILE), |
| + content::BrowserThread::GetMessageLoopProxyForThread( |
| + content::BrowserThread::IO))); |
| +} |
| + |
| } // namespace policy |