Index: chrome/browser/policy/device_local_account_policy_service.cc |
diff --git a/chrome/browser/policy/device_local_account_policy_service.cc b/chrome/browser/policy/device_local_account_policy_service.cc |
deleted file mode 100644 |
index 69de8e3e17f60f7a84e03d012233254ae116c6f2..0000000000000000000000000000000000000000 |
--- a/chrome/browser/policy/device_local_account_policy_service.cc |
+++ /dev/null |
@@ -1,258 +0,0 @@ |
-// Copyright (c) 2012 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/policy/device_local_account_policy_service.h" |
- |
-#include "base/logging.h" |
-#include "base/message_loop.h" |
-#include "chrome/browser/policy/cloud_policy_client.h" |
-#include "chrome/browser/policy/cloud_policy_constants.h" |
-#include "chrome/browser/policy/cloud_policy_refresh_scheduler.h" |
-#include "chrome/browser/policy/device_local_account_policy_store.h" |
-#include "chrome/browser/policy/device_management_service.h" |
-#include "chrome/browser/policy/proto/chrome_device_policy.pb.h" |
-#include "chrome/browser/policy/proto/device_management_backend.pb.h" |
-#include "chromeos/dbus/session_manager_client.h" |
-#include "policy/policy_constants.h" |
- |
-namespace em = enterprise_management; |
- |
-namespace policy { |
- |
-DeviceLocalAccountPolicyBroker::DeviceLocalAccountPolicyBroker( |
- scoped_ptr<DeviceLocalAccountPolicyStore> store) |
- : store_(store.Pass()), |
- core_(PolicyNamespaceKey(dm_protocol::kChromePublicAccountPolicyType, |
- store_->account_id()), |
- store_.get()) {} |
- |
-DeviceLocalAccountPolicyBroker::~DeviceLocalAccountPolicyBroker() {} |
- |
-const std::string& DeviceLocalAccountPolicyBroker::account_id() const { |
- return store_->account_id(); |
-} |
- |
-void DeviceLocalAccountPolicyBroker::Connect( |
- scoped_ptr<CloudPolicyClient> client) { |
- core_.Connect(client.Pass()); |
- core_.StartRefreshScheduler(); |
- UpdateRefreshDelay(); |
-} |
- |
-void DeviceLocalAccountPolicyBroker::Disconnect() { |
- core_.Disconnect(); |
-} |
- |
-void DeviceLocalAccountPolicyBroker::UpdateRefreshDelay() { |
- if (core_.refresh_scheduler()) { |
- const Value* policy_value = |
- store_->policy_map().GetValue(key::kPolicyRefreshRate); |
- int delay = 0; |
- if (policy_value && policy_value->GetAsInteger(&delay)) |
- core_.refresh_scheduler()->SetRefreshDelay(delay); |
- } |
-} |
- |
-std::string DeviceLocalAccountPolicyBroker::GetDisplayName() const { |
- std::string display_name; |
- const base::Value* display_name_value = |
- store_->policy_map().GetValue(policy::key::kUserDisplayName); |
- if (display_name_value) |
- display_name_value->GetAsString(&display_name); |
- return display_name; |
-} |
- |
-DeviceLocalAccountPolicyService::DeviceLocalAccountPolicyService( |
- chromeos::SessionManagerClient* session_manager_client, |
- chromeos::DeviceSettingsService* device_settings_service) |
- : session_manager_client_(session_manager_client), |
- device_settings_service_(device_settings_service), |
- device_management_service_(NULL) { |
- device_settings_service_->AddObserver(this); |
- DeviceSettingsUpdated(); |
-} |
- |
-DeviceLocalAccountPolicyService::~DeviceLocalAccountPolicyService() { |
- device_settings_service_->RemoveObserver(this); |
- DeleteBrokers(&policy_brokers_); |
-} |
- |
-void DeviceLocalAccountPolicyService::Connect( |
- DeviceManagementService* device_management_service) { |
- DCHECK(!device_management_service_); |
- device_management_service_ = device_management_service; |
- |
- // Connect the brokers. |
- for (PolicyBrokerMap::iterator broker(policy_brokers_.begin()); |
- broker != policy_brokers_.end(); ++broker) { |
- DCHECK(!broker->second->core()->client()); |
- broker->second->Connect( |
- CreateClientForAccount(broker->second->account_id()).Pass()); |
- } |
-} |
- |
-void DeviceLocalAccountPolicyService::Disconnect() { |
- DCHECK(device_management_service_); |
- device_management_service_ = NULL; |
- |
- // Disconnect the brokers. |
- for (PolicyBrokerMap::iterator broker(policy_brokers_.begin()); |
- broker != policy_brokers_.end(); ++broker) { |
- broker->second->Disconnect(); |
- } |
-} |
- |
-DeviceLocalAccountPolicyBroker* |
- DeviceLocalAccountPolicyService::GetBrokerForAccount( |
- const std::string& account_id) { |
- PolicyBrokerMap::iterator entry = policy_brokers_.find(account_id); |
- if (entry == policy_brokers_.end()) |
- return NULL; |
- |
- if (!entry->second) |
- entry->second = CreateBroker(account_id).release(); |
- |
- return entry->second; |
-} |
- |
-bool DeviceLocalAccountPolicyService::IsPolicyAvailableForAccount( |
- const std::string& account_id) { |
- DeviceLocalAccountPolicyBroker* broker = GetBrokerForAccount(account_id); |
- return broker && broker->core()->store()->is_managed(); |
-} |
- |
-void DeviceLocalAccountPolicyService::AddObserver(Observer* observer) { |
- observers_.AddObserver(observer); |
-} |
- |
-void DeviceLocalAccountPolicyService::RemoveObserver(Observer* observer) { |
- observers_.RemoveObserver(observer); |
-} |
- |
-void DeviceLocalAccountPolicyService::OwnershipStatusChanged() { |
- // TODO(mnissler): The policy key has changed, re-fetch policy. For |
- // consumer devices, re-sign the current settings and send updates to |
- // session_manager. |
-} |
- |
-void DeviceLocalAccountPolicyService::DeviceSettingsUpdated() { |
- const em::ChromeDeviceSettingsProto* device_settings = |
- device_settings_service_->device_settings(); |
- if (device_settings) |
- UpdateAccountList(*device_settings); |
-} |
- |
-void DeviceLocalAccountPolicyService::OnStoreLoaded(CloudPolicyStore* store) { |
- DeviceLocalAccountPolicyBroker* broker = GetBrokerForStore(store); |
- broker->UpdateRefreshDelay(); |
- FOR_EACH_OBSERVER(Observer, observers_, |
- OnPolicyUpdated(broker->account_id())); |
-} |
- |
-void DeviceLocalAccountPolicyService::OnStoreError(CloudPolicyStore* store) { |
- DeviceLocalAccountPolicyBroker* broker = GetBrokerForStore(store); |
- FOR_EACH_OBSERVER(Observer, observers_, |
- OnPolicyUpdated(broker->account_id())); |
-} |
- |
-void DeviceLocalAccountPolicyService::UpdateAccountList( |
- const em::ChromeDeviceSettingsProto& device_settings) { |
- using google::protobuf::RepeatedPtrField; |
- |
- // Update |policy_brokers_|, keeping existing entries. |
- PolicyBrokerMap new_policy_brokers; |
- const RepeatedPtrField<em::DeviceLocalAccountInfoProto>& accounts = |
- device_settings.device_local_accounts().account(); |
- RepeatedPtrField<em::DeviceLocalAccountInfoProto>::const_iterator entry; |
- for (entry = accounts.begin(); entry != accounts.end(); ++entry) { |
- if (entry->has_id()) { |
- // Sanity check for whether this account ID has already been processed. |
- DeviceLocalAccountPolicyBroker*& new_broker = |
- new_policy_brokers[entry->id()]; |
- if (new_broker) { |
- LOG(WARNING) << "Duplicate public account " << entry->id(); |
- continue; |
- } |
- |
- // Reuse the existing broker if present. |
- DeviceLocalAccountPolicyBroker*& existing_broker = |
- policy_brokers_[entry->id()]; |
- new_broker = existing_broker; |
- existing_broker = NULL; |
- |
- // Fire up the cloud connection for fetching policy for the account from |
- // the cloud if this is an enterprise-managed device. |
- if (!new_broker || !new_broker->core()->client()) { |
- scoped_ptr<CloudPolicyClient> client( |
- CreateClientForAccount(entry->id())); |
- if (client.get()) { |
- if (!new_broker) |
- new_broker = CreateBroker(entry->id()).release(); |
- new_broker->Connect(client.Pass()); |
- } |
- } |
- } |
- } |
- policy_brokers_.swap(new_policy_brokers); |
- DeleteBrokers(&new_policy_brokers); |
- |
- FOR_EACH_OBSERVER(Observer, observers_, OnDeviceLocalAccountsChanged()); |
-} |
- |
-scoped_ptr<DeviceLocalAccountPolicyBroker> |
- DeviceLocalAccountPolicyService::CreateBroker( |
- const std::string& account_id) { |
- scoped_ptr<DeviceLocalAccountPolicyStore> store( |
- new DeviceLocalAccountPolicyStore(account_id, session_manager_client_, |
- device_settings_service_)); |
- scoped_ptr<DeviceLocalAccountPolicyBroker> broker( |
- new DeviceLocalAccountPolicyBroker(store.Pass())); |
- broker->core()->store()->AddObserver(this); |
- broker->core()->store()->Load(); |
- return broker.Pass(); |
-} |
- |
-void DeviceLocalAccountPolicyService::DeleteBrokers(PolicyBrokerMap* map) { |
- for (PolicyBrokerMap::iterator broker = map->begin(); broker != map->end(); |
- ++broker) { |
- if (broker->second) { |
- broker->second->core()->store()->RemoveObserver(this); |
- delete broker->second; |
- } |
- } |
- map->clear(); |
-} |
- |
-DeviceLocalAccountPolicyBroker* |
- DeviceLocalAccountPolicyService::GetBrokerForStore( |
- CloudPolicyStore* store) { |
- for (PolicyBrokerMap::iterator broker(policy_brokers_.begin()); |
- broker != policy_brokers_.end(); ++broker) { |
- if (broker->second->core()->store() == store) |
- return broker->second; |
- } |
- return NULL; |
-} |
- |
-scoped_ptr<CloudPolicyClient> |
- DeviceLocalAccountPolicyService::CreateClientForAccount( |
- const std::string& account_id) { |
- const em::PolicyData* policy_data = device_settings_service_->policy_data(); |
- if (!policy_data || |
- !policy_data->has_request_token() || |
- !policy_data->has_device_id() || |
- !device_management_service_) { |
- return scoped_ptr<CloudPolicyClient>(); |
- } |
- |
- scoped_ptr<CloudPolicyClient> client( |
- new CloudPolicyClient(std::string(), std::string(), |
- USER_AFFILIATION_MANAGED, |
- NULL, device_management_service_)); |
- client->SetupRegistration(policy_data->request_token(), |
- policy_data->device_id()); |
- return client.Pass(); |
-} |
- |
-} // namespace policy |