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