1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef COMPONENTS_POLICY_CORE_COMMON_CLOUD_USER_CLOUD_POLICY_STORE_BASE_H_
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define COMPONENTS_POLICY_CORE_COMMON_CLOUD_USER_CLOUD_POLICY_STORE_BASE_H_
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <string>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/ref_counted.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/weak_ptr.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_store.h"
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_validator.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/policy/policy_export.h"
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace base {
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class SequencedTaskRunner;
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace policy {
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Base class that implements common cross-platform UserCloudPolicyStore
25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// functionality.
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class POLICY_EXPORT UserCloudPolicyStoreBase : public CloudPolicyStore {
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public:
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  explicit UserCloudPolicyStoreBase(
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      scoped_refptr<base::SequencedTaskRunner> background_task_runner);
30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual ~UserCloudPolicyStoreBase();
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected:
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Creates a validator configured to validate a user policy. The caller owns
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // the resulting object until StartValidation() is invoked.
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_ptr<UserCloudPolicyValidator> CreateValidator(
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      scoped_ptr<enterprise_management::PolicyFetchResponse> policy,
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CloudPolicyValidatorBase::ValidateTimestampOption option);
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Sets |policy_data| and |payload| as the active policy.
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void InstallPolicy(
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      scoped_ptr<enterprise_management::PolicyData> policy_data,
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      scoped_ptr<enterprise_management::CloudPolicySettings> payload);
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<base::SequencedTaskRunner> background_task_runner() const {
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return background_task_runner_;
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Task runner for background file operations.
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(UserCloudPolicyStoreBase);
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace policy
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif  // COMPONENTS_POLICY_CORE_COMMON_CLOUD_USER_CLOUD_POLICY_STORE_BASE_H_
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)