OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/url_request/url_request_job.h" | 5 #include "net/url_request/url_request_job.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/power_monitor/power_monitor.h" | 10 #include "base/power_monitor/power_monitor.h" |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 } | 271 } |
272 | 272 |
273 void URLRequestJob::NotifyURLRequestDestroyed() { | 273 void URLRequestJob::NotifyURLRequestDestroyed() { |
274 } | 274 } |
275 | 275 |
276 void URLRequestJob::GetConnectionAttempts(ConnectionAttempts* out) const { | 276 void URLRequestJob::GetConnectionAttempts(ConnectionAttempts* out) const { |
277 out->clear(); | 277 out->clear(); |
278 } | 278 } |
279 | 279 |
280 // static | 280 // static |
281 GURL URLRequestJob::ComputeReferrerForRedirect( | 281 std::string URLRequestJob::ComputeReferrerForRedirect( |
282 URLRequest::ReferrerPolicy policy, | 282 URLRequest::ReferrerPolicy policy, |
283 const std::string& referrer, | 283 const std::string& original_referrer, |
284 const GURL& redirect_destination) { | 284 const GURL& redirect_destination) { |
285 GURL original_referrer(referrer); | 285 url::Origin original_origin(original_referrer); |
286 bool secure_referrer_but_insecure_destination = | 286 url::Origin destination_origin(redirect_destination); |
287 original_referrer.SchemeIsCryptographic() && | 287 bool secure_referrer_but_insecure_destination = original_origin.SchemeIsCrypto
graphic() && !destination_origin.SchemeIsCryptographic(); |
288 !redirect_destination.SchemeIsCryptographic(); | 288 bool same_origin = url::Origin(original_referrer) == url::Origin(redirect_dest
ination); |
289 bool same_origin = | |
290 original_referrer.GetOrigin() == redirect_destination.GetOrigin(); | |
291 switch (policy) { | 289 switch (policy) { |
292 case URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE: | 290 case URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE: |
293 return secure_referrer_but_insecure_destination ? GURL() | 291 return secure_referrer_but_insecure_destination ? "" |
294 : original_referrer; | 292 : original_referrer; |
295 | 293 |
296 case URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN: | 294 case URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN: |
297 if (same_origin) { | 295 if (same_origin) { |
298 return original_referrer; | 296 return original_referrer; |
299 } else if (secure_referrer_but_insecure_destination) { | 297 } else if (secure_referrer_but_insecure_destination) { |
300 return GURL(); | 298 return ""; |
301 } else { | 299 } else { |
302 return original_referrer.GetOrigin(); | 300 return url::Origin(original_referrer).serialize() + "/"; |
303 } | 301 } |
304 | 302 |
305 case URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN: | 303 case URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN: |
306 return same_origin ? original_referrer : original_referrer.GetOrigin(); | 304 return same_origin ? original_referrer : original_origin.serialize() + "/"
; |
307 | 305 |
308 case URLRequest::NEVER_CLEAR_REFERRER: | 306 case URLRequest::NEVER_CLEAR_REFERRER: |
309 return original_referrer; | 307 return original_referrer; |
310 } | 308 } |
311 | 309 |
312 NOTREACHED(); | 310 NOTREACHED(); |
313 return GURL(); | 311 return ""; |
314 } | 312 } |
315 | 313 |
316 URLRequestJob::~URLRequestJob() { | 314 URLRequestJob::~URLRequestJob() { |
317 base::PowerMonitor* power_monitor = base::PowerMonitor::Get(); | 315 base::PowerMonitor* power_monitor = base::PowerMonitor::Get(); |
318 if (power_monitor) | 316 if (power_monitor) |
319 power_monitor->RemoveObserver(this); | 317 power_monitor->RemoveObserver(this); |
320 } | 318 } |
321 | 319 |
322 void URLRequestJob::NotifyCertificateRequested( | 320 void URLRequestJob::NotifyCertificateRequested( |
323 SSLCertRequestInfo* cert_request_info) { | 321 SSLCertRequestInfo* cert_request_info) { |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
859 redirect_info.new_first_party_for_cookies = redirect_info.new_url; | 857 redirect_info.new_first_party_for_cookies = redirect_info.new_url; |
860 } else { | 858 } else { |
861 redirect_info.new_first_party_for_cookies = | 859 redirect_info.new_first_party_for_cookies = |
862 request_->first_party_for_cookies(); | 860 request_->first_party_for_cookies(); |
863 } | 861 } |
864 | 862 |
865 // Alter the referrer if redirecting cross-origin (especially HTTP->HTTPS). | 863 // Alter the referrer if redirecting cross-origin (especially HTTP->HTTPS). |
866 redirect_info.new_referrer = | 864 redirect_info.new_referrer = |
867 ComputeReferrerForRedirect(request_->referrer_policy(), | 865 ComputeReferrerForRedirect(request_->referrer_policy(), |
868 request_->referrer(), | 866 request_->referrer(), |
869 redirect_info.new_url).spec(); | 867 redirect_info.new_url); |
870 | 868 |
871 return redirect_info; | 869 return redirect_info; |
872 } | 870 } |
873 | 871 |
874 } // namespace net | 872 } // namespace net |
OLD | NEW |