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