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