url_fetcher_impl.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 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 "net/url_request/url_fetcher_impl.h"
6
7#include "base/bind.h"
8#include "base/message_loop_proxy.h"
9#include "net/url_request/url_fetcher_core.h"
10#include "net/url_request/url_fetcher_factory.h"
11
12namespace net {
13
14static URLFetcherFactory* g_factory = NULL;
15
16URLFetcherImpl::URLFetcherImpl(const GURL& url,
17                               RequestType request_type,
18                               URLFetcherDelegate* d)
19    : ALLOW_THIS_IN_INITIALIZER_LIST(
20        core_(new URLFetcherCore(this, url, request_type, d))) {
21}
22
23URLFetcherImpl::~URLFetcherImpl() {
24  core_->Stop();
25}
26
27void URLFetcherImpl::SetUploadData(const std::string& upload_content_type,
28                                   const std::string& upload_content) {
29  core_->SetUploadData(upload_content_type, upload_content);
30}
31
32void URLFetcherImpl::SetUploadFilePath(
33    const std::string& upload_content_type,
34    const base::FilePath& file_path,
35    scoped_refptr<base::TaskRunner> file_task_runner) {
36  core_->SetUploadFilePath(upload_content_type, file_path, file_task_runner);
37}
38
39void URLFetcherImpl::SetChunkedUpload(const std::string& content_type) {
40  core_->SetChunkedUpload(content_type);
41}
42
43void URLFetcherImpl::AppendChunkToUpload(const std::string& data,
44                                         bool is_last_chunk) {
45  DCHECK(data.length());
46  core_->AppendChunkToUpload(data, is_last_chunk);
47}
48
49void URLFetcherImpl::SetReferrer(const std::string& referrer) {
50  core_->SetReferrer(referrer);
51}
52
53void URLFetcherImpl::SetLoadFlags(int load_flags) {
54  core_->SetLoadFlags(load_flags);
55}
56
57int URLFetcherImpl::GetLoadFlags() const {
58  return core_->GetLoadFlags();
59}
60
61void URLFetcherImpl::SetExtraRequestHeaders(
62    const std::string& extra_request_headers) {
63  core_->SetExtraRequestHeaders(extra_request_headers);
64}
65
66void URLFetcherImpl::AddExtraRequestHeader(const std::string& header_line) {
67  core_->AddExtraRequestHeader(header_line);
68}
69
70void URLFetcherImpl::GetExtraRequestHeaders(
71    HttpRequestHeaders* headers) const {
72  GetExtraRequestHeaders(headers);
73}
74
75void URLFetcherImpl::SetRequestContext(
76    URLRequestContextGetter* request_context_getter) {
77  core_->SetRequestContext(request_context_getter);
78}
79
80void URLFetcherImpl::SetFirstPartyForCookies(
81    const GURL& first_party_for_cookies) {
82  core_->SetFirstPartyForCookies(first_party_for_cookies);
83}
84
85void URLFetcherImpl::SetURLRequestUserData(
86    const void* key,
87    const CreateDataCallback& create_data_callback) {
88  core_->SetURLRequestUserData(key, create_data_callback);
89}
90
91void URLFetcherImpl::SetStopOnRedirect(bool stop_on_redirect) {
92  core_->SetStopOnRedirect(stop_on_redirect);
93}
94
95void URLFetcherImpl::SetAutomaticallyRetryOn5xx(bool retry) {
96  core_->SetAutomaticallyRetryOn5xx(retry);
97}
98
99void URLFetcherImpl::SetMaxRetriesOn5xx(int max_retries) {
100  core_->SetMaxRetriesOn5xx(max_retries);
101}
102
103int URLFetcherImpl::GetMaxRetriesOn5xx() const {
104  return core_->GetMaxRetriesOn5xx();
105}
106
107
108base::TimeDelta URLFetcherImpl::GetBackoffDelay() const {
109  return core_->GetBackoffDelay();
110}
111
112void URLFetcherImpl::SetAutomaticallyRetryOnNetworkChanges(int max_retries) {
113  core_->SetAutomaticallyRetryOnNetworkChanges(max_retries);
114}
115
116void URLFetcherImpl::SaveResponseToFileAtPath(
117    const base::FilePath& file_path,
118    scoped_refptr<base::TaskRunner> file_task_runner) {
119  core_->SaveResponseToFileAtPath(file_path, file_task_runner);
120}
121
122void URLFetcherImpl::SaveResponseToTemporaryFile(
123    scoped_refptr<base::TaskRunner> file_task_runner) {
124  core_->SaveResponseToTemporaryFile(file_task_runner);
125}
126
127HttpResponseHeaders* URLFetcherImpl::GetResponseHeaders() const {
128  return core_->GetResponseHeaders();
129}
130
131HostPortPair URLFetcherImpl::GetSocketAddress() const {
132  return core_->GetSocketAddress();
133}
134
135bool URLFetcherImpl::WasFetchedViaProxy() const {
136  return core_->WasFetchedViaProxy();
137}
138
139void URLFetcherImpl::Start() {
140  core_->Start();
141}
142
143const GURL& URLFetcherImpl::GetOriginalURL() const {
144  return core_->GetOriginalURL();
145}
146
147const GURL& URLFetcherImpl::GetURL() const {
148  return core_->GetURL();
149}
150
151const URLRequestStatus& URLFetcherImpl::GetStatus() const {
152  return core_->GetStatus();
153}
154
155int URLFetcherImpl::GetResponseCode() const {
156  return core_->GetResponseCode();
157}
158
159const ResponseCookies& URLFetcherImpl::GetCookies() const {
160  return core_->GetCookies();
161}
162
163bool URLFetcherImpl::FileErrorOccurred(int* out_error_code) const {
164  return core_->FileErrorOccurred(out_error_code);
165}
166
167void URLFetcherImpl::ReceivedContentWasMalformed() {
168  core_->ReceivedContentWasMalformed();
169}
170
171bool URLFetcherImpl::GetResponseAsString(
172    std::string* out_response_string) const {
173  return core_->GetResponseAsString(out_response_string);
174}
175
176bool URLFetcherImpl::GetResponseAsFilePath(
177    bool take_ownership,
178    base::FilePath* out_response_path) const {
179  return core_->GetResponseAsFilePath(take_ownership, out_response_path);
180}
181
182// static
183void URLFetcherImpl::CancelAll() {
184  URLFetcherCore::CancelAll();
185}
186
187// static
188void URLFetcherImpl::SetEnableInterceptionForTests(bool enabled) {
189  URLFetcherCore::SetEnableInterceptionForTests(enabled);
190}
191
192// static
193void URLFetcherImpl::SetIgnoreCertificateRequests(bool ignored) {
194  URLFetcherCore::SetIgnoreCertificateRequests(ignored);
195}
196
197// static
198int URLFetcherImpl::GetNumFetcherCores() {
199  return URLFetcherCore::GetNumFetcherCores();
200}
201
202URLFetcherDelegate* URLFetcherImpl::delegate() const {
203  return core_->delegate();
204}
205
206// static
207URLFetcherFactory* URLFetcherImpl::factory() {
208  return g_factory;
209}
210
211// static
212void URLFetcherImpl::set_factory(URLFetcherFactory* factory) {
213  g_factory = factory;
214}
215
216}  // namespace net
217