blob: 0c014e794bb4efe806883250e5a35944e562d542 [file] [log] [blame]
// 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 COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_
#define COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_
#include <memory>
#include <string>
#include "base/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "components/policy/policy_export.h"
namespace policy {
class ExternalDataManager;
// A helper that encapsulates the parameters required to retrieve the external
// data for a policy.
class POLICY_EXPORT ExternalDataFetcher {
public:
typedef base::Callback<void(std::unique_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 // COMPONENTS_POLICY_CORE_COMMON_EXTERNAL_DATA_FETCHER_H_