OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/proxy/proxy_script_fetcher_impl.h" | 5 #include "net/proxy/proxy_script_fetcher_impl.h" |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/i18n/icu_string_conversions.h" | 8 #include "base/i18n/icu_string_conversions.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 DCHECK_EQ(request, cur_request_.get()); | 108 DCHECK_EQ(request, cur_request_.get()); |
109 | 109 |
110 // Use |result_code_| as the request's error if we have already set it to | 110 // Use |result_code_| as the request's error if we have already set it to |
111 // something specific. | 111 // something specific. |
112 if (result_code_ == OK && !request->status().is_success()) | 112 if (result_code_ == OK && !request->status().is_success()) |
113 result_code_ = request->status().os_error(); | 113 result_code_ = request->status().os_error(); |
114 | 114 |
115 FetchCompleted(); | 115 FetchCompleted(); |
116 } | 116 } |
117 | 117 |
118 int ProxyScriptFetcherImpl::Fetch(const GURL& url, | 118 int ProxyScriptFetcherImpl::Fetch(string16* text, |
119 string16* text, | |
120 CompletionCallback* callback) { | 119 CompletionCallback* callback) { |
121 // It is invalid to call Fetch() while a request is already in progress. | 120 // It is invalid to call Fetch() while a request is already in progress. |
122 DCHECK(!cur_request_.get()); | 121 DCHECK(!cur_request_.get()); |
123 | 122 |
124 DCHECK(callback); | 123 DCHECK(callback); |
125 DCHECK(text); | 124 DCHECK(text); |
| 125 DCHECK(url_.is_valid()); |
126 | 126 |
127 // Handle base-64 encoded data-urls that contain custom PAC scripts. | 127 // Handle base-64 encoded data-urls that contain custom PAC scripts. |
128 if (url.SchemeIs("data")) { | 128 if (url_.SchemeIs("data")) { |
129 std::string mime_type; | 129 std::string mime_type; |
130 std::string charset; | 130 std::string charset; |
131 std::string data; | 131 std::string data; |
132 if (!DataURL::Parse(url, &mime_type, &charset, &data)) | 132 if (!DataURL::Parse(url_, &mime_type, &charset, &data)) |
133 return ERR_FAILED; | 133 return ERR_FAILED; |
134 | 134 |
135 ConvertResponseToUTF16(charset, data, text); | 135 ConvertResponseToUTF16(charset, data, text); |
136 return OK; | 136 return OK; |
137 } | 137 } |
138 | 138 |
139 cur_request_.reset(new URLRequest(url, this)); | 139 cur_request_.reset(new URLRequest(url_, this)); |
140 cur_request_->set_context(url_request_context_); | 140 cur_request_->set_context(url_request_context_); |
141 cur_request_->set_method("GET"); | 141 cur_request_->set_method("GET"); |
142 | 142 |
143 // Make sure that the PAC script is downloaded using a direct connection, | 143 // Make sure that the PAC script is downloaded using a direct connection, |
144 // to avoid circular dependencies (fetching is a part of proxy resolution). | 144 // to avoid circular dependencies (fetching is a part of proxy resolution). |
145 // Also disable the use of the disk cache. The cache is disabled so that if | 145 // Also disable the use of the disk cache. The cache is disabled so that if |
146 // the user switches networks we don't potentially use the cached response | 146 // the user switches networks we don't potentially use the cached response |
147 // from old network when we should in fact be re-fetching on the new network. | 147 // from old network when we should in fact be re-fetching on the new network. |
148 cur_request_->set_load_flags(LOAD_BYPASS_PROXY | LOAD_DISABLE_CACHE); | 148 cur_request_->set_load_flags(LOAD_BYPASS_PROXY | LOAD_DISABLE_CACHE); |
149 | 149 |
(...skipping 14 matching lines...) Expand all Loading... |
164 cur_request_->Start(); | 164 cur_request_->Start(); |
165 return ERR_IO_PENDING; | 165 return ERR_IO_PENDING; |
166 } | 166 } |
167 | 167 |
168 void ProxyScriptFetcherImpl::Cancel() { | 168 void ProxyScriptFetcherImpl::Cancel() { |
169 // ResetCurRequestState will free the URLRequest, which will cause | 169 // ResetCurRequestState will free the URLRequest, which will cause |
170 // cancellation. | 170 // cancellation. |
171 ResetCurRequestState(); | 171 ResetCurRequestState(); |
172 } | 172 } |
173 | 173 |
174 URLRequestContext* ProxyScriptFetcherImpl::GetRequestContext() { | 174 URLRequestContext* ProxyScriptFetcherImpl::GetRequestContext() const { |
175 return url_request_context_; | 175 return url_request_context_; |
176 } | 176 } |
177 | 177 |
| 178 void ProxyScriptFetcherImpl::SetURL(const GURL& url) { |
| 179 url_ = url; |
| 180 } |
| 181 |
178 void ProxyScriptFetcherImpl::OnAuthRequired(URLRequest* request, | 182 void ProxyScriptFetcherImpl::OnAuthRequired(URLRequest* request, |
179 AuthChallengeInfo* auth_info) { | 183 AuthChallengeInfo* auth_info) { |
180 DCHECK_EQ(request, cur_request_.get()); | 184 DCHECK_EQ(request, cur_request_.get()); |
181 // TODO(eroman): http://crbug.com/77366 | 185 // TODO(eroman): http://crbug.com/77366 |
182 LOG(WARNING) << "Auth required to fetch PAC script, aborting."; | 186 LOG(WARNING) << "Auth required to fetch PAC script, aborting."; |
183 result_code_ = ERR_NOT_IMPLEMENTED; | 187 result_code_ = ERR_NOT_IMPLEMENTED; |
184 request->CancelAuth(); | 188 request->CancelAuth(); |
185 } | 189 } |
186 | 190 |
187 void ProxyScriptFetcherImpl::OnSSLCertificateError(URLRequest* request, | 191 void ProxyScriptFetcherImpl::OnSSLCertificateError(URLRequest* request, |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 // is still applicable. | 311 // is still applicable. |
308 if (cur_request_id_ != id) | 312 if (cur_request_id_ != id) |
309 return; | 313 return; |
310 | 314 |
311 DCHECK(cur_request_.get()); | 315 DCHECK(cur_request_.get()); |
312 result_code_ = ERR_TIMED_OUT; | 316 result_code_ = ERR_TIMED_OUT; |
313 cur_request_->Cancel(); | 317 cur_request_->Cancel(); |
314 } | 318 } |
315 | 319 |
316 } // namespace net | 320 } // namespace net |
OLD | NEW |