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.
5 #include "chrome/browser/translate/translate_url_fetcher.h"
7 #include "chrome/browser/browser_process.h"
8 #include "net/base/load_flags.h"
9 #include "net/http/http_status_code.h"
10 #include "net/url_request/url_fetcher.h"
11 #include "net/url_request/url_request_status.h"
15 // Retry parameter for fetching.
16 const int kMaxRetry = 16;
20 TranslateURLFetcher::TranslateURLFetcher(int id)
26 TranslateURLFetcher::~TranslateURLFetcher() {
29 bool TranslateURLFetcher::Request(
31 const TranslateURLFetcher::Callback& callback) {
32 // This function is not supposed to be called before previous operaion is not
34 if (state_ == REQUESTING) {
39 if (retry_count_ >= kMaxRetry)
47 fetcher_.reset(net::URLFetcher::Create(
52 fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
53 net::LOAD_DO_NOT_SAVE_COOKIES);
54 fetcher_->SetRequestContext(g_browser_process->system_request_context());
55 // Set retry parameter for HTTP status code 5xx. This doesn't work against
56 // 106 (net::ERR_INTERNET_DISCONNECTED) and so on.
57 // TranslateLanguageList handles network status, and implements retry.
58 fetcher_->SetMaxRetriesOn5xx(max_retry_on_5xx_);
59 if (!extra_request_header_.empty())
60 fetcher_->SetExtraRequestHeaders(extra_request_header_);
67 void TranslateURLFetcher::OnURLFetchComplete(const net::URLFetcher* source) {
68 DCHECK(fetcher_.get() == source);
71 if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS &&
72 source->GetResponseCode() == net::HTTP_OK) {
74 source->GetResponseAsString(&data);
79 // Transfer URLFetcher's ownership before invoking a callback.
80 scoped_ptr<const net::URLFetcher> delete_ptr(fetcher_.release());
81 callback_.Run(id_, state_ == COMPLETED, data);