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