Home | History | Annotate | Download | only in cloud
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "components/policy/core/common/cloud/user_cloud_policy_store_base.h"
      6 
      7 #include "components/policy/core/common/cloud/cloud_external_data_manager.h"
      8 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
      9 #include "components/policy/core/common/policy_map.h"
     10 #include "policy/proto/cloud_policy.pb.h"
     11 
     12 namespace policy {
     13 
     14 // Decodes a CloudPolicySettings object into a policy map. The implementation is
     15 // generated code in policy/cloud_policy_generated.cc.
     16 void DecodePolicy(const enterprise_management::CloudPolicySettings& policy,
     17                   base::WeakPtr<CloudExternalDataManager> external_data_manager,
     18                   PolicyMap* policies);
     19 
     20 UserCloudPolicyStoreBase::UserCloudPolicyStoreBase(
     21     scoped_refptr<base::SequencedTaskRunner> background_task_runner)
     22     : background_task_runner_(background_task_runner) {}
     23 
     24 UserCloudPolicyStoreBase::~UserCloudPolicyStoreBase() {
     25 }
     26 
     27 scoped_ptr<UserCloudPolicyValidator> UserCloudPolicyStoreBase::CreateValidator(
     28     scoped_ptr<enterprise_management::PolicyFetchResponse> policy,
     29     CloudPolicyValidatorBase::ValidateTimestampOption timestamp_option) {
     30   // Configure the validator.
     31   UserCloudPolicyValidator* validator =
     32       UserCloudPolicyValidator::Create(policy.Pass(), background_task_runner_);
     33   validator->ValidatePolicyType(GetChromeUserPolicyType());
     34   validator->ValidateAgainstCurrentPolicy(
     35       policy_.get(),
     36       timestamp_option,
     37       CloudPolicyValidatorBase::DM_TOKEN_REQUIRED);
     38   validator->ValidatePayload();
     39   return scoped_ptr<UserCloudPolicyValidator>(validator);
     40 }
     41 
     42 void UserCloudPolicyStoreBase::InstallPolicy(
     43     scoped_ptr<enterprise_management::PolicyData> policy_data,
     44     scoped_ptr<enterprise_management::CloudPolicySettings> payload) {
     45   // Decode the payload.
     46   policy_map_.Clear();
     47   DecodePolicy(*payload, external_data_manager(), &policy_map_);
     48   policy_ = policy_data.Pass();
     49 }
     50 
     51 }  // namespace policy
     52