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 #ifndef COMPONENTS_POLICY_CORE_COMMON_CLOUD_POLICY_HEADER_SERVICE_H_
      6 #define COMPONENTS_POLICY_CORE_COMMON_CLOUD_POLICY_HEADER_SERVICE_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/memory/ref_counted.h"
     12 #include "base/memory/scoped_ptr.h"
     13 #include "components/policy/core/common/cloud/cloud_policy_store.h"
     14 #include "components/policy/policy_export.h"
     15 
     16 namespace base {
     17 class SequencedTaskRunner;
     18 }
     19 
     20 namespace policy {
     21 
     22 class PolicyHeaderIOHelper;
     23 
     24 // Per-profile service used to generate PolicyHeaderIOHelper objects, and
     25 // keep them up-to-date as policy changes.
     26 // TODO(atwilson): Move to components/policy once CloudPolicyStore is moved.
     27 class POLICY_EXPORT PolicyHeaderService : public CloudPolicyStore::Observer {
     28  public:
     29   // |device_policy_store| can be null on platforms that do not support
     30   // device policy. Both |user_policy_store| and |device_policy_store| must
     31   // outlive this object.
     32   PolicyHeaderService(const std::string& server_url,
     33                       const std::string& verification_key_hash,
     34                       CloudPolicyStore* user_policy_store,
     35                       CloudPolicyStore* device_policy_store);
     36   virtual ~PolicyHeaderService();
     37 
     38   // Creates a PolicyHeaderIOHelper object to be run on the IO thread and
     39   // add policy headers to outgoing requests. The caller takes ownership of
     40   // this object and must ensure it outlives ProfileHeaderService (in practice,
     41   // this is called by ProfileIOData, which is shutdown *after* all
     42   // ProfileKeyedServices are shutdown).
     43   scoped_ptr<PolicyHeaderIOHelper> CreatePolicyHeaderIOHelper(
     44       scoped_refptr<base::SequencedTaskRunner> task_runner);
     45 
     46   // Overridden CloudPolicyStore::Observer methods:
     47   virtual void OnStoreLoaded(CloudPolicyStore* store) OVERRIDE;
     48   virtual void OnStoreError(CloudPolicyStore* store) OVERRIDE;
     49 
     50   // Returns a list of all PolicyHeaderIOHelpers created by this object.
     51   std::vector<PolicyHeaderIOHelper*> GetHelpersForTest();
     52 
     53  private:
     54   // Generate a policy header based on the currently loaded policy.
     55   std::string CreateHeaderValue();
     56 
     57   // Weak pointer to created PolicyHeaderIOHelper objects.
     58   std::vector<PolicyHeaderIOHelper*> helpers_;
     59 
     60   // URL of the policy server.
     61   std::string server_url_;
     62 
     63   // Identifier for the verification key this Chrome instance is using.
     64   std::string verification_key_hash_;
     65 
     66   // Weak pointers to User-/Device-level policy stores.
     67   CloudPolicyStore* user_policy_store_;
     68   CloudPolicyStore* device_policy_store_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(PolicyHeaderService);
     71 };
     72 
     73 }  // namespace policy
     74 
     75 #endif  // COMPONENTS_POLICY_CORE_COMMON_CLOUD_POLICY_HEADER_SERVICE_H_
     76