| Index: chrome/browser/chromeos/policy/device_local_account_policy_service.cc
|
| diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_service.cc b/chrome/browser/chromeos/policy/device_local_account_policy_service.cc
|
| index 150095cb11d4266b75338c6d6ae7d077387efd09..6fa5a13ae8d2e69284774c65a601cde045aff7de 100644
|
| --- a/chrome/browser/chromeos/policy/device_local_account_policy_service.cc
|
| +++ b/chrome/browser/chromeos/policy/device_local_account_policy_service.cc
|
| @@ -18,11 +18,14 @@
|
| #include "base/sequenced_task_runner.h"
|
| #include "base/stl_util.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/thread_task_runner_handle.h"
|
| +#include "base/time/default_clock.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/chromeos/policy/device_local_account.h"
|
| #include "chrome/browser/chromeos/policy/device_local_account_external_data_service.h"
|
| #include "chrome/browser/chromeos/policy/device_local_account_policy_store.h"
|
| #include "chrome/browser/chromeos/settings/device_settings_service.h"
|
| +#include "chrome/browser/policy/cloud/cloud_policy_invalidator.h"
|
| #include "chrome/common/chrome_content_client.h"
|
| #include "chromeos/chromeos_paths.h"
|
| #include "chromeos/dbus/session_manager_client.h"
|
| @@ -115,13 +118,15 @@ void DeleteObsoleteExtensionCache(const std::string& account_id_to_delete) {
|
| } // namespace
|
|
|
| DeviceLocalAccountPolicyBroker::DeviceLocalAccountPolicyBroker(
|
| + AffiliatedInvalidationServiceProvider* invalidation_service_provider,
|
| const DeviceLocalAccount& account,
|
| const base::FilePath& component_policy_cache_path,
|
| scoped_ptr<DeviceLocalAccountPolicyStore> store,
|
| scoped_refptr<DeviceLocalAccountExternalDataManager> external_data_manager,
|
| const base::Closure& policy_update_callback,
|
| const scoped_refptr<base::SequencedTaskRunner>& task_runner)
|
| - : account_id_(account.account_id),
|
| + : invalidation_service_provider_(invalidation_service_provider),
|
| + account_id_(account.account_id),
|
| user_id_(account.user_id),
|
| component_policy_cache_path_(component_policy_cache_path),
|
| store_(store.Pass()),
|
| @@ -131,7 +136,9 @@ DeviceLocalAccountPolicyBroker::DeviceLocalAccountPolicyBroker(
|
| store_->account_id(),
|
| store_.get(),
|
| task_runner),
|
| - policy_update_callback_(policy_update_callback) {
|
| + policy_update_callback_(policy_update_callback),
|
| + highest_handled_invalidation_version_(0),
|
| + invalidation_service_(nullptr) {
|
| base::FilePath cache_root_dir;
|
| CHECK(PathService::Get(chromeos::DIR_DEVICE_LOCAL_ACCOUNT_EXTENSIONS,
|
| &cache_root_dir));
|
| @@ -148,9 +155,13 @@ DeviceLocalAccountPolicyBroker::DeviceLocalAccountPolicyBroker(
|
| g_browser_process->browser_policy_connector()->GetChromeSchema());
|
| schema_registry_.SetReady(POLICY_DOMAIN_CHROME);
|
| schema_registry_.SetReady(POLICY_DOMAIN_EXTENSIONS);
|
| +
|
| + invalidation_service_provider_->RegisterConsumer(this);
|
| }
|
|
|
| DeviceLocalAccountPolicyBroker::~DeviceLocalAccountPolicyBroker() {
|
| + DestroyInvalidator();
|
| + invalidation_service_provider_->UnregisterConsumer(this);
|
| store_->RemoveObserver(this);
|
| external_data_manager_->SetPolicyStore(nullptr);
|
| external_data_manager_->Disconnect();
|
| @@ -164,7 +175,7 @@ void DeviceLocalAccountPolicyBroker::ConnectIfPossible(
|
| chromeos::DeviceSettingsService* device_settings_service,
|
| DeviceManagementService* device_management_service,
|
| scoped_refptr<net::URLRequestContextGetter> request_context) {
|
| - if (core_.client())
|
| + if (IsConnected())
|
| return;
|
|
|
| scoped_ptr<CloudPolicyClient> client(CreateClient(device_settings_service,
|
| @@ -178,6 +189,7 @@ void DeviceLocalAccountPolicyBroker::ConnectIfPossible(
|
| external_data_manager_->Connect(request_context);
|
| core_.StartRefreshScheduler();
|
| UpdateRefreshDelay();
|
| + CreateInvalidatorIfPossible();
|
| }
|
|
|
| void DeviceLocalAccountPolicyBroker::UpdateRefreshDelay() {
|
| @@ -212,6 +224,24 @@ void DeviceLocalAccountPolicyBroker::OnComponentCloudPolicyUpdated() {
|
| policy_update_callback_.Run();
|
| }
|
|
|
| +void DeviceLocalAccountPolicyBroker::OnInvalidationServiceSet(
|
| + invalidation::InvalidationService* invalidation_service) {
|
| + DestroyInvalidator();
|
| +
|
| + invalidation_service_ = invalidation_service;
|
| + if (invalidation_service_)
|
| + CreateInvalidatorIfPossible();
|
| +}
|
| +
|
| +CloudPolicyInvalidator*
|
| +DeviceLocalAccountPolicyBroker::GetInvalidatorForTest() const {
|
| + return invalidator_.get();
|
| +}
|
| +
|
| +bool DeviceLocalAccountPolicyBroker::IsConnected() {
|
| + return core_.client();
|
| +}
|
| +
|
| void DeviceLocalAccountPolicyBroker::CreateComponentCloudPolicyService(
|
| const scoped_refptr<net::URLRequestContextGetter>& request_context,
|
| CloudPolicyClient* client) {
|
| @@ -239,10 +269,36 @@ void DeviceLocalAccountPolicyBroker::CreateComponentCloudPolicyService(
|
| content::BrowserThread::IO)));
|
| }
|
|
|
| +void DeviceLocalAccountPolicyBroker::CreateInvalidatorIfPossible() {
|
| + DCHECK(!invalidator_);
|
| +
|
| + if (!invalidation_service_ || !IsConnected())
|
| + return;
|
| +
|
| + invalidator_.reset(new CloudPolicyInvalidator(
|
| + enterprise_management::DeviceRegisterRequest::USER,
|
| + core(),
|
| + base::ThreadTaskRunnerHandle::Get(),
|
| + make_scoped_ptr(new base::DefaultClock),
|
| + highest_handled_invalidation_version_));
|
| + invalidator_->Initialize(invalidation_service_);
|
| +}
|
| +
|
| +void DeviceLocalAccountPolicyBroker::DestroyInvalidator() {
|
| + if (!invalidator_)
|
| + return;
|
| +
|
| + highest_handled_invalidation_version_ =
|
| + invalidator_->highest_handled_invalidation_version();
|
| + invalidator_->Shutdown();
|
| + invalidator_.reset();
|
| +}
|
| +
|
| DeviceLocalAccountPolicyService::DeviceLocalAccountPolicyService(
|
| chromeos::SessionManagerClient* session_manager_client,
|
| chromeos::DeviceSettingsService* device_settings_service,
|
| chromeos::CrosSettings* cros_settings,
|
| + AffiliatedInvalidationServiceProvider* invalidation_service_provider,
|
| scoped_refptr<base::SequencedTaskRunner> store_background_task_runner,
|
| scoped_refptr<base::SequencedTaskRunner> extension_cache_task_runner,
|
| scoped_refptr<base::SequencedTaskRunner>
|
| @@ -252,6 +308,7 @@ DeviceLocalAccountPolicyService::DeviceLocalAccountPolicyService(
|
| : session_manager_client_(session_manager_client),
|
| device_settings_service_(device_settings_service),
|
| cros_settings_(cros_settings),
|
| + invalidation_service_provider_(invalidation_service_provider),
|
| device_management_service_(nullptr),
|
| waiting_for_cros_settings_(false),
|
| orphan_extension_cache_deletion_state_(NOT_STARTED),
|
| @@ -454,6 +511,7 @@ void DeviceLocalAccountPolicyService::UpdateAccountList() {
|
| external_data_service_->GetExternalDataManager(it->account_id,
|
| store.get());
|
| broker.reset(new DeviceLocalAccountPolicyBroker(
|
| + invalidation_service_provider_,
|
| *it,
|
| component_policy_cache_root_.Append(
|
| GetCacheSubdirectoryForAccountID(it->account_id)),
|
|
|