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