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