14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/callback.h"
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/url_request/url_fetcher.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h"
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace dom_distiller {
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DistillerURLFetcher;
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Class for creating a DistillerURLFetcher.
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class DistillerURLFetcherFactory {
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit DistillerURLFetcherFactory(
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      net::URLRequestContextGetter* context_getter);
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~DistillerURLFetcherFactory() {}
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual DistillerURLFetcher* CreateDistillerURLFetcher() const;
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  net::URLRequestContextGetter* context_getter_;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This class fetches a URL, and notifies the caller when the operation
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// completes or fails. If the request fails, an empty string will be returned.
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class DistillerURLFetcher : public net::URLFetcherDelegate {
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit DistillerURLFetcher(net::URLRequestContextGetter* context_getter);
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~DistillerURLFetcher();
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Indicates when a fetch is done.
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  typedef base::Callback<void(const std::string& data)> URLFetcherCallback;
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Fetches a |url|. Notifies when the fetch is done via |callback|.
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void FetchURL(const std::string& url,
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                        const URLFetcherCallback& callback);
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected:
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual net::URLFetcher* CreateURLFetcher(
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      net::URLRequestContextGetter* context_getter,
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      const std::string& url);
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private:
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // net::URLFetcherDelegate:
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  scoped_ptr<net::URLFetcher> url_fetcher_;
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  URLFetcherCallback callback_;
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  net::URLRequestContextGetter* context_getter_;
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DistillerURLFetcher);
584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  //  namespace dom_distiller
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // COMPONENTS_DOM_DISTILLER_CORE_DISTILLER_URL_FETCHER_H_
63