| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/public/common/referrer.h" | 5 #include "content/public/common/referrer.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "content/public/common/content_switches.h" | 10 #include "content/public/common/content_switches.h" |
| 11 #include "net/url_request/url_request.h" | |
| 12 | 11 |
| 13 namespace content { | 12 namespace content { |
| 14 | 13 |
| 15 // static | 14 // static |
| 16 Referrer Referrer::SanitizeForRequest(const GURL& request, | 15 Referrer Referrer::SanitizeForRequest(const GURL& request, |
| 17 const Referrer& referrer) { | 16 const Referrer& referrer) { |
| 18 Referrer sanitized_referrer(referrer.url.GetAsReferrer(), referrer.policy); | 17 Referrer sanitized_referrer(referrer.url.GetAsReferrer(), referrer.policy); |
| 19 if (sanitized_referrer.policy == blink::WebReferrerPolicyDefault) { | 18 if (sanitized_referrer.policy == blink::WebReferrerPolicyDefault) { |
| 20 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 19 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 21 switches::kReducedReferrerGranularity)) { | 20 switches::kReducedReferrerGranularity)) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 void Referrer::SetReferrerForRequest(net::URLRequest* request, | 76 void Referrer::SetReferrerForRequest(net::URLRequest* request, |
| 78 const Referrer& referrer) { | 77 const Referrer& referrer) { |
| 79 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 78 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 80 if (!referrer.url.is_valid() || | 79 if (!referrer.url.is_valid() || |
| 81 command_line->HasSwitch(switches::kNoReferrers)) { | 80 command_line->HasSwitch(switches::kNoReferrers)) { |
| 82 request->SetReferrer(std::string()); | 81 request->SetReferrer(std::string()); |
| 83 } else { | 82 } else { |
| 84 request->SetReferrer(referrer.url.spec()); | 83 request->SetReferrer(referrer.url.spec()); |
| 85 } | 84 } |
| 86 | 85 |
| 87 net::URLRequest::ReferrerPolicy net_referrer_policy = | 86 request->set_referrer_policy(ReferrerPolicyForUrlRequest(referrer)); |
| 88 net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; | 87 } |
| 88 |
| 89 // static |
| 90 net::URLRequest::ReferrerPolicy Referrer::ReferrerPolicyForUrlRequest( |
| 91 const Referrer& referrer) { |
| 89 switch (referrer.policy) { | 92 switch (referrer.policy) { |
| 90 case blink::WebReferrerPolicyAlways: | 93 case blink::WebReferrerPolicyAlways: |
| 91 net_referrer_policy = net::URLRequest::NEVER_CLEAR_REFERRER; | 94 return net::URLRequest::NEVER_CLEAR_REFERRER; |
| 92 break; | |
| 93 case blink::WebReferrerPolicyNever: | 95 case blink::WebReferrerPolicyNever: |
| 94 net_referrer_policy = net::URLRequest::NO_REFERRER; | 96 return net::URLRequest::NO_REFERRER; |
| 95 break; | |
| 96 case blink::WebReferrerPolicyOrigin: | 97 case blink::WebReferrerPolicyOrigin: |
| 97 net_referrer_policy = net::URLRequest::ORIGIN; | 98 return net::URLRequest::ORIGIN; |
| 98 break; | |
| 99 case blink::WebReferrerPolicyNoReferrerWhenDowngrade: | 99 case blink::WebReferrerPolicyNoReferrerWhenDowngrade: |
| 100 net_referrer_policy = | 100 return net::URLRequest:: |
| 101 net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; | 101 CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
| 102 break; | |
| 103 case blink::WebReferrerPolicyOriginWhenCrossOrigin: | 102 case blink::WebReferrerPolicyOriginWhenCrossOrigin: |
| 104 net_referrer_policy = | 103 return net::URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN; |
| 105 net::URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN; | |
| 106 break; | |
| 107 case blink::WebReferrerPolicyDefault: | 104 case blink::WebReferrerPolicyDefault: |
| 108 net_referrer_policy = | 105 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 109 command_line->HasSwitch(switches::kReducedReferrerGranularity) | 106 switches::kReducedReferrerGranularity)) { |
| 110 ? net::URLRequest:: | 107 return net::URLRequest:: |
| 111 REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN | 108 REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN; |
| 112 : net::URLRequest:: | 109 } |
| 113 CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; | 110 return net::URLRequest:: |
| 114 break; | 111 CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
| 115 case blink::WebReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin: | 112 case blink::WebReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin: |
| 116 net_referrer_policy = net::URLRequest:: | 113 return net::URLRequest:: |
| 117 REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN; | 114 REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN; |
| 118 break; | |
| 119 } | 115 } |
| 120 request->set_referrer_policy(net_referrer_policy); | 116 return net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
| 121 } | 117 } |
| 122 | 118 |
| 123 } // namespace content | 119 } // namespace content |
| OLD | NEW |