19ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 29ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 39ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// found in the LICENSE file. 49ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_ 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_ 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include <map> 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include <string> 109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 113240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "base/basictypes.h" 123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "base/memory/ref_counted.h" 133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch#include "base/memory/weak_ptr.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_manager.h" 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/policy_export.h" 169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochnamespace net { 183240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochclass URLRequestContextGetter; 193240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 203240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace policy { 229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 233240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochclass CloudPolicyStore; 243240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Downloads, verifies, caches and retrieves external data referenced by 269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// policies. 279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// This a common base class used by cloud policy implementations and mocks. 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class POLICY_EXPORT CloudExternalDataManager : public ExternalDataManager { 299ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch public: 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) struct POLICY_EXPORT MetadataEntry { 319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch MetadataEntry(); 329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch MetadataEntry(const std::string& url, const std::string& hash); 339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 343240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool operator!=(const MetadataEntry& other) const; 353240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch std::string url; 379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch std::string hash; 389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch }; 399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Maps from policy names to the metadata specifying the external data that 409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // each of the policies references. 419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch typedef std::map<std::string, MetadataEntry> Metadata; 423240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 433240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch CloudExternalDataManager(); 443240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual ~CloudExternalDataManager(); 453240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 463240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Sets the source of external data references to |policy_store|. The manager 473240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // will start observing |policy_store| so that when external data references 483240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // change, obsolete data can be deleted and new data can be downloaded. If the 493240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // |policy_store| is destroyed before the manager, the connection must be 503240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // severed first by calling SetPolicyStore(NULL). 513240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void SetPolicyStore(CloudPolicyStore* policy_store); 523240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 533240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Called by the |policy_store_| when policy changes. 543240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void OnPolicyStoreLoaded() = 0; 553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Allows the manager to download external data by constructing URLFetchers 573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // from |request_context|. 583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void Connect( 593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch scoped_refptr<net::URLRequestContextGetter> request_context) = 0; 603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Prevents further external data downloads and aborts any downloads currently 623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // in progress. 633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch virtual void Disconnect() = 0; 643240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 653240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch protected: 663240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch CloudPolicyStore* policy_store_; // Not owned. 673240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 683240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch base::WeakPtrFactory<CloudExternalDataManager> weak_factory_; 693240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 703240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch DISALLOW_COPY_AND_ASSIGN(CloudExternalDataManager); 719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}; 729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 739ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} // namespace policy 749ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif // COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_EXTERNAL_DATA_MANAGER_H_ 76