1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
#define COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
#include <string>
#include "base/functional/callback.h"
namespace network {
class SharedURLLoaderFactory;
class SimpleURLLoader;
} // namespace network
namespace dom_distiller {
class DistillerURLFetcher;
// Class for creating a DistillerURLFetcher.
class DistillerURLFetcherFactory {
public:
explicit DistillerURLFetcherFactory(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory);
virtual ~DistillerURLFetcherFactory();
virtual DistillerURLFetcher* CreateDistillerURLFetcher() const;
private:
friend class TestDistillerURLFetcherFactory;
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
};
// This class loads a URL, and notifies the caller when the operation
// completes or fails. If the request fails, an empty string will be returned.
class DistillerURLFetcher {
public:
explicit DistillerURLFetcher(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory);
virtual ~DistillerURLFetcher();
// Indicates when a fetch is done.
using URLFetcherCallback = base::OnceCallback<void(const std::string& data)>;
// Fetches a |url|. Notifies when the fetch is done via |callback|.
virtual void FetchURL(const std::string& url, URLFetcherCallback callback);
DistillerURLFetcher(const DistillerURLFetcher&) = delete;
DistillerURLFetcher& operator=(const DistillerURLFetcher&) = delete;
protected:
virtual std::unique_ptr<network::SimpleURLLoader> CreateURLFetcher(
const std::string& url);
private:
void OnURLLoadComplete(std::unique_ptr<std::string> response_body);
std::unique_ptr<network::SimpleURLLoader> url_loader_;
URLFetcherCallback callback_;
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
};
} // namespace dom_distiller
#endif // COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
|