| 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 |