1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
6#define COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
7
8#include <string>
9
10#include "base/callback.h"
11#include "net/url_request/url_fetcher.h"
12#include "net/url_request/url_fetcher_delegate.h"
13#include "net/url_request/url_request_context_getter.h"
14
15namespace dom_distiller {
16
17class DistillerURLFetcher;
18
19// Class for creating a DistillerURLFetcher.
20class DistillerURLFetcherFactory {
21 public:
22  explicit DistillerURLFetcherFactory(
23      net::URLRequestContextGetter* context_getter);
24  virtual ~DistillerURLFetcherFactory() {}
25  virtual DistillerURLFetcher* CreateDistillerURLFetcher() const;
26
27 private:
28  net::URLRequestContextGetter* context_getter_;
29};
30
31// This class fetches a URL, and notifies the caller when the operation
32// completes or fails. If the request fails, an empty string will be returned.
33class DistillerURLFetcher : public net::URLFetcherDelegate {
34 public:
35  explicit DistillerURLFetcher(net::URLRequestContextGetter* context_getter);
36  virtual ~DistillerURLFetcher();
37
38  // Indicates when a fetch is done.
39  typedef base::Callback<void(const std::string& data)> URLFetcherCallback;
40
41  // Fetches a |url|. Notifies when the fetch is done via |callback|.
42  virtual void FetchURL(const std::string& url,
43                        const URLFetcherCallback& callback);
44
45 protected:
46  virtual net::URLFetcher* CreateURLFetcher(
47      net::URLRequestContextGetter* context_getter,
48      const std::string& url);
49
50 private:
51  // net::URLFetcherDelegate:
52  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
53
54  scoped_ptr<net::URLFetcher> url_fetcher_;
55  URLFetcherCallback callback_;
56  net::URLRequestContextGetter* context_getter_;
57  DISALLOW_COPY_AND_ASSIGN(DistillerURLFetcher);
58};
59
60}  //  namespace dom_distiller
61
62#endif  // COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
63