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