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