// 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_EXTERNAL_DATA_FETCHER_H_
#define CHROME_BROWSER_POLICY_EXTERNAL_DATA_FETCHER_H_

#include <string>

#include "base/callback_forward.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"

namespace policy {

class ExternalDataManager;

// A helper that encapsulates the parameters required to retrieve the external
// data for a policy.
class ExternalDataFetcher {
 public:
  typedef base::Callback<void(scoped_ptr<std::string>)> FetchCallback;

  // This instance's Fetch() method will instruct the |manager| to retrieve the
  // external data referenced by the given |policy|.
  ExternalDataFetcher(base::WeakPtr<ExternalDataManager> manager,
                      const std::string& policy);
  ExternalDataFetcher(const ExternalDataFetcher& other);

  ~ExternalDataFetcher();

  static bool Equals(const ExternalDataFetcher* first,
                     const ExternalDataFetcher* second);

  // Retrieves the external data referenced by |policy_| and invokes |callback|
  // with the result. If |policy_| does not reference any external data, the
  // |callback| is invoked with a NULL pointer. Otherwise, the |callback| is
  // invoked with the referenced data once it has been successfully retrieved.
  // If retrieval is temporarily impossible (e.g. no network connectivity), the
  // |callback| will be invoked when the temporary hindrance is resolved. If
  // retrieval is permanently impossible (e.g. |policy_| references data that
  // does not exist on the server), the |callback| will never be invoked.
  void Fetch(const FetchCallback& callback) const;

 private:
  base::WeakPtr<ExternalDataManager> manager_;
  const std::string policy_;
};

}  // namespace policy

#endif  // CHROME_BROWSER_POLICY_EXTERNAL_DATA_FETCHER_H_
