15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_store_base.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_external_data_manager.h"
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_constants.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "policy/proto/cloud_policy.pb.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Decodes a CloudPolicySettings object into a policy map. The implementation is
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// generated code in policy/cloud_policy_generated.cc.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodePolicy(const enterprise_management::CloudPolicySettings& policy,
173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch                  base::WeakPtr<CloudExternalDataManager> external_data_manager,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  PolicyMap* policies);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)UserCloudPolicyStoreBase::UserCloudPolicyStoreBase(
218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    scoped_refptr<base::SequencedTaskRunner> background_task_runner)
228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    : background_task_runner_(background_task_runner) {}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserCloudPolicyStoreBase::~UserCloudPolicyStoreBase() {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_ptr<UserCloudPolicyValidator> UserCloudPolicyStoreBase::CreateValidator(
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    scoped_ptr<enterprise_management::PolicyFetchResponse> policy,
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    CloudPolicyValidatorBase::ValidateTimestampOption timestamp_option) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Configure the validator.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UserCloudPolicyValidator* validator =
328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      UserCloudPolicyValidator::Create(policy.Pass(), background_task_runner_);
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  validator->ValidatePolicyType(GetChromeUserPolicyType());
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  validator->ValidateAgainstCurrentPolicy(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      policy_.get(),
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      timestamp_option,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CloudPolicyValidatorBase::DM_TOKEN_REQUIRED);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  validator->ValidatePayload();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return scoped_ptr<UserCloudPolicyValidator>(validator);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserCloudPolicyStoreBase::InstallPolicy(
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<enterprise_management::PolicyData> policy_data,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<enterprise_management::CloudPolicySettings> payload) {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Decode the payload.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_map_.Clear();
473240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  DecodePolicy(*payload, external_data_manager(), &policy_map_);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  policy_ = policy_data.Pass();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
52