blob: 3f104a23169ad77d6c8fd91ef2f7185ecbfab0d6 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_POLICY_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_
#define CHROME_BROWSER_POLICY_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_
#include <map>
#include <string>
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/policy/external_data_manager.h"
namespace net {
class URLRequestContextGetter;
}
namespace policy {
class CloudPolicyStore;
// Downloads, verifies, caches and retrieves external data referenced by
// policies.
// This a common base class used by cloud policy implementations and mocks.
class CloudExternalDataManager : public ExternalDataManager {
public:
struct MetadataEntry {
MetadataEntry();
MetadataEntry(const std::string& url, const std::string& hash);
bool operator!=(const MetadataEntry& other) const;
std::string url;
std::string hash;
};
// Maps from policy names to the metadata specifying the external data that
// each of the policies references.
typedef std::map<std::string, MetadataEntry> Metadata;
CloudExternalDataManager();
virtual ~CloudExternalDataManager();
// Sets the source of external data references to |policy_store|. The manager
// will start observing |policy_store| so that when external data references
// change, obsolete data can be deleted and new data can be downloaded. If the
// |policy_store| is destroyed before the manager, the connection must be
// severed first by calling SetPolicyStore(NULL).
virtual void SetPolicyStore(CloudPolicyStore* policy_store);
// Called by the |policy_store_| when policy changes.
virtual void OnPolicyStoreLoaded() = 0;
// Allows the manager to download external data by constructing URLFetchers
// from |request_context|.
virtual void Connect(
scoped_refptr<net::URLRequestContextGetter> request_context) = 0;
// Prevents further external data downloads and aborts any downloads currently
// in progress.
virtual void Disconnect() = 0;
protected:
CloudPolicyStore* policy_store_; // Not owned.
base::WeakPtrFactory<CloudExternalDataManager> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(CloudExternalDataManager);
};
} // namespace policy
#endif // CHROME_BROWSER_POLICY_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_