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 15 namespace dom_distiller { 16 17 class DistillerURLFetcher; 18 19 // Class for creating a DistillerURLFetcher. 20 class 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. 33 class 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