• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "components/dom_distiller/core/distiller_url_fetcher.h"
6 
7 #include "net/http/http_status_code.h"
8 #include "net/url_request/url_fetcher.h"
9 #include "net/url_request/url_fetcher_delegate.h"
10 #include "net/url_request/url_request_context_getter.h"
11 #include "net/url_request/url_request_status.h"
12 #include "url/gurl.h"
13 
14 using net::URLFetcher;
15 
16 namespace dom_distiller {
17 
DistillerURLFetcherFactory(net::URLRequestContextGetter * context_getter)18 DistillerURLFetcherFactory::DistillerURLFetcherFactory(
19     net::URLRequestContextGetter* context_getter)
20   : context_getter_(context_getter) {
21 }
22 
23 DistillerURLFetcher*
CreateDistillerURLFetcher() const24 DistillerURLFetcherFactory::CreateDistillerURLFetcher() const {
25   return new DistillerURLFetcher(context_getter_);
26 }
27 
28 
DistillerURLFetcher(net::URLRequestContextGetter * context_getter)29 DistillerURLFetcher::DistillerURLFetcher(
30     net::URLRequestContextGetter* context_getter)
31   : context_getter_(context_getter) {
32 }
33 
~DistillerURLFetcher()34 DistillerURLFetcher::~DistillerURLFetcher() {
35 }
36 
FetchURL(const std::string & url,const URLFetcherCallback & callback)37 void DistillerURLFetcher::FetchURL(const std::string& url,
38                                    const URLFetcherCallback& callback) {
39   // Don't allow a fetch if one is pending.
40   DCHECK(!url_fetcher_ || !url_fetcher_->GetStatus().is_io_pending());
41   callback_ = callback;
42   url_fetcher_.reset(CreateURLFetcher(context_getter_, url));
43   url_fetcher_->Start();
44 }
45 
CreateURLFetcher(net::URLRequestContextGetter * context_getter,const std::string & url)46 URLFetcher*  DistillerURLFetcher::CreateURLFetcher(
47     net::URLRequestContextGetter* context_getter,
48     const std::string& url) {
49   net::URLFetcher* fetcher =
50       URLFetcher::Create(GURL(url), URLFetcher::GET, this);
51   fetcher->SetRequestContext(context_getter);
52   static const int kMaxRetries = 5;
53   fetcher->SetMaxRetriesOn5xx(kMaxRetries);
54   return fetcher;
55 }
56 
OnURLFetchComplete(const URLFetcher * source)57 void DistillerURLFetcher::OnURLFetchComplete(
58     const URLFetcher* source) {
59   std::string response;
60   if (source && source->GetStatus().is_success() &&
61       source->GetResponseCode() == net::HTTP_OK) {
62     // Only copy over the data if the request was successful. Insert
63     // an empty string into the proto otherwise.
64     source->GetResponseAsString(&response);
65   }
66   callback_.Run(response);
67 }
68 
69 }  // namespace dom_distiller
70