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_EXTERNAL_DATA_FETCHER_H_ 6#define COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_ 7 8#include <string> 9 10#include "base/callback_forward.h" 11#include "base/memory/scoped_ptr.h" 12#include "base/memory/weak_ptr.h" 13#include "components/policy/policy_export.h" 14 15namespace policy { 16 17class ExternalDataManager; 18 19// A helper that encapsulates the parameters required to retrieve the external 20// data for a policy. 21class POLICY_EXPORT ExternalDataFetcher { 22 public: 23 typedef base::Callback<void(scoped_ptr<std::string>)> FetchCallback; 24 25 // This instance's Fetch() method will instruct the |manager| to retrieve the 26 // external data referenced by the given |policy|. 27 ExternalDataFetcher(base::WeakPtr<ExternalDataManager> manager, 28 const std::string& policy); 29 ExternalDataFetcher(const ExternalDataFetcher& other); 30 31 ~ExternalDataFetcher(); 32 33 static bool Equals(const ExternalDataFetcher* first, 34 const ExternalDataFetcher* second); 35 36 // Retrieves the external data referenced by |policy_| and invokes |callback| 37 // with the result. If |policy_| does not reference any external data, the 38 // |callback| is invoked with a NULL pointer. Otherwise, the |callback| is 39 // invoked with the referenced data once it has been successfully retrieved. 40 // If retrieval is temporarily impossible (e.g. no network connectivity), the 41 // |callback| will be invoked when the temporary hindrance is resolved. If 42 // retrieval is permanently impossible (e.g. |policy_| references data that 43 // does not exist on the server), the |callback| will never be invoked. 44 void Fetch(const FetchCallback& callback) const; 45 46 private: 47 base::WeakPtr<ExternalDataManager> manager_; 48 const std::string policy_; 49}; 50 51} // namespace policy 52 53#endif // COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_ 54