17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_ 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <string> 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback_forward.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/weak_ptr.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/policy_export.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace policy { 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ExternalDataManager; 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// A helper that encapsulates the parameters required to retrieve the external 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// data for a policy. 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class POLICY_EXPORT ExternalDataFetcher { 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch typedef base::Callback<void(scoped_ptr<std::string>)> FetchCallback; 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // This instance's Fetch() method will instruct the |manager| to retrieve the 269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // external data referenced by the given |policy|. 279ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ExternalDataFetcher(base::WeakPtr<ExternalDataManager> manager, 289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const std::string& policy); 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ExternalDataFetcher(const ExternalDataFetcher& other); 309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ~ExternalDataFetcher(); 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static bool Equals(const ExternalDataFetcher* first, 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const ExternalDataFetcher* second); 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // Retrieves the external data referenced by |policy_| and invokes |callback| 379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // with the result. If |policy_| does not reference any external data, the 389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // |callback| is invoked with a NULL pointer. Otherwise, the |callback| is 399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // invoked with the referenced data once it has been successfully retrieved. 409ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // If retrieval is temporarily impossible (e.g. no network connectivity), the 419ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // |callback| will be invoked when the temporary hindrance is resolved. If 429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // retrieval is permanently impossible (e.g. |policy_| references data that 439ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch // does not exist on the server), the |callback| will never be invoked. 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Fetch(const FetchCallback& callback) const; 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::WeakPtr<ExternalDataManager> manager_; 483240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const std::string policy_; 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace policy 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_ 54