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_CLOUD_EXTERNAL_DATA_MANAGER_H_
      6 #define COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "base/memory/weak_ptr.h"
     14 #include "components/policy/core/common/external_data_manager.h"
     15 #include "components/policy/policy_export.h"
     16 
     17 namespace net {
     18 class URLRequestContextGetter;
     19 }
     20 
     21 namespace policy {
     22 
     23 class CloudPolicyStore;
     24 
     25 // Downloads, verifies, caches and retrieves external data referenced by
     26 // policies.
     27 // This a common base class used by cloud policy implementations and mocks.
     28 class POLICY_EXPORT CloudExternalDataManager : public ExternalDataManager {
     29  public:
     30   struct POLICY_EXPORT MetadataEntry {
     31     MetadataEntry();
     32     MetadataEntry(const std::string& url, const std::string& hash);
     33 
     34     bool operator!=(const MetadataEntry& other) const;
     35 
     36     std::string url;
     37     std::string hash;
     38   };
     39   // Maps from policy names to the metadata specifying the external data that
     40   // each of the policies references.
     41   typedef std::map<std::string, MetadataEntry> Metadata;
     42 
     43   CloudExternalDataManager();
     44   virtual ~CloudExternalDataManager();
     45 
     46   // Sets the source of external data references to |policy_store|. The manager
     47   // will start observing |policy_store| so that when external data references
     48   // change, obsolete data can be deleted and new data can be downloaded. If the
     49   // |policy_store| is destroyed before the manager, the connection must be
     50   // severed first by calling SetPolicyStore(NULL).
     51   virtual void SetPolicyStore(CloudPolicyStore* policy_store);
     52 
     53   // Called by the |policy_store_| when policy changes.
     54   virtual void OnPolicyStoreLoaded() = 0;
     55 
     56   // Allows the manager to download external data by constructing URLFetchers
     57   // from |request_context|.
     58   virtual void Connect(
     59       scoped_refptr<net::URLRequestContextGetter> request_context) = 0;
     60 
     61   // Prevents further external data downloads and aborts any downloads currently
     62   // in progress.
     63   virtual void Disconnect() = 0;
     64 
     65  protected:
     66   CloudPolicyStore* policy_store_;  // Not owned.
     67 
     68   base::WeakPtrFactory<CloudExternalDataManager> weak_factory_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(CloudExternalDataManager);
     71 };
     72 
     73 }  // namespace policy
     74 
     75 #endif  // COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_
     76