| Index: chrome/browser/chromeos/policy/device_local_account_external_data_service.cc
|
| diff --git a/chrome/browser/chromeos/policy/device_local_account_external_data_service.cc b/chrome/browser/chromeos/policy/device_local_account_external_data_service.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e751a4d3c9923de87b02bc81cbed9e46a2fb47ca
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/policy/device_local_account_external_data_service.cc
|
| @@ -0,0 +1,88 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/chromeos/policy/device_local_account_external_data_service.h"
|
| +
|
| +#include <set>
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| +#include "base/files/file_path.h"
|
| +#include "base/location.h"
|
| +#include "base/logging.h"
|
| +#include "base/path_service.h"
|
| +#include "base/sequenced_task_runner.h"
|
| +#include "chrome/browser/policy/cloud/cloud_policy_store.h"
|
| +#include "chromeos/chromeos_paths.h"
|
| +#include "policy/policy_constants.h"
|
| +
|
| +namespace policy {
|
| +
|
| +DeviceLocalAccountExternalDataService::DeviceLocalAccountExternalDataService(
|
| + DeviceLocalAccountPolicyService* parent,
|
| + scoped_refptr<base::SequencedTaskRunner> backend_task_runner,
|
| + scoped_refptr<base::SequencedTaskRunner> io_task_runner)
|
| + : parent_(parent),
|
| + backend_task_runner_(backend_task_runner),
|
| + io_task_runner_(io_task_runner) {
|
| + base::FilePath cache_dir;
|
| + CHECK(PathService::Get(chromeos::DIR_DEVICE_LOCAL_ACCOUNT_EXTERNAL_DATA,
|
| + &cache_dir));
|
| + resource_cache_.reset(new ResourceCache(cache_dir, backend_task_runner));
|
| + parent_->AddObserver(this);
|
| +}
|
| +
|
| +DeviceLocalAccountExternalDataService::
|
| + ~DeviceLocalAccountExternalDataService() {
|
| + parent_->RemoveObserver(this);
|
| +#if !defined(NDEBUG)
|
| + for (ExternalDataManagerMap::const_iterator it =
|
| + external_data_managers_.begin();
|
| + it != external_data_managers_.end(); ++it) {
|
| + DCHECK(it->second->HasOneRef());
|
| + }
|
| +#endif // !defined(NDEBUG)
|
| + backend_task_runner_->DeleteSoon(FROM_HERE, resource_cache_.release());
|
| +}
|
| +
|
| +void DeviceLocalAccountExternalDataService::OnPolicyUpdated(
|
| + const std::string& user_id) {
|
| +}
|
| +
|
| +void DeviceLocalAccountExternalDataService::OnDeviceLocalAccountsChanged() {
|
| + std::set<std::string> account_ids;
|
| + for (ExternalDataManagerMap::iterator it = external_data_managers_.begin();
|
| + it != external_data_managers_.end(); ) {
|
| + if (it->second->HasOneRef()) {
|
| + external_data_managers_.erase(it++);
|
| + } else {
|
| + account_ids.insert(it->first);
|
| + ++it;
|
| + }
|
| + }
|
| + backend_task_runner_->PostTask(FROM_HERE, base::Bind(
|
| + &ResourceCache::PurgeOtherKeys,
|
| + base::Unretained(resource_cache_.get()),
|
| + account_ids));
|
| +}
|
| +
|
| +scoped_refptr<DeviceLocalAccountExternalDataManager>
|
| + DeviceLocalAccountExternalDataService::GetExternalDataManager(
|
| + const std::string& account_id,
|
| + CloudPolicyStore* policy_store) {
|
| + scoped_refptr<DeviceLocalAccountExternalDataManager>& external_data_manager =
|
| + external_data_managers_[account_id];
|
| + if (!external_data_manager) {
|
| + external_data_manager = new DeviceLocalAccountExternalDataManager(
|
| + account_id,
|
| + GetChromePolicyDefinitionList(),
|
| + backend_task_runner_,
|
| + io_task_runner_,
|
| + resource_cache_.get());
|
| + }
|
| + external_data_manager->SetPolicyStore(policy_store);
|
| + return external_data_manager;
|
| +}
|
| +
|
| +} // namespace policy
|
|
|