| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ios/web/public/referrer_util.h" | 5 #include "ios/web/public/referrer_util.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "ios/web/public/referrer.h" | 8 #include "ios/web/public/referrer.h" |
| 9 #include "url/gurl.h" | 9 #include "url/gurl.h" |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 return referrer.url.GetOrigin().spec(); | 24 return referrer.url.GetOrigin().spec(); |
| 25 case ReferrerPolicyDefault: | 25 case ReferrerPolicyDefault: |
| 26 case ReferrerPolicyNoReferrerWhenDowngrade: | 26 case ReferrerPolicyNoReferrerWhenDowngrade: |
| 27 if (is_downgrade) | 27 if (is_downgrade) |
| 28 return std::string(); | 28 return std::string(); |
| 29 return referrer.url.GetAsReferrer().spec(); | 29 return referrer.url.GetAsReferrer().spec(); |
| 30 case ReferrerPolicyOriginWhenCrossOrigin: | 30 case ReferrerPolicyOriginWhenCrossOrigin: |
| 31 if (referrer.url.GetOrigin() != destination.GetOrigin()) | 31 if (referrer.url.GetOrigin() != destination.GetOrigin()) |
| 32 return referrer.url.GetOrigin().spec(); | 32 return referrer.url.GetOrigin().spec(); |
| 33 return referrer.url.GetAsReferrer().spec(); | 33 return referrer.url.GetAsReferrer().spec(); |
| 34 case ReferrerPolicySameOrigin: |
| 35 if (referrer.url.GetOrigin() != destination.GetOrigin()) |
| 36 return std::string(); |
| 37 return referrer.url.GetAsReferrer().spec(); |
| 38 case ReferrerPolicyStrictOrigin: |
| 39 if (is_downgrade) |
| 40 return std::string(); |
| 41 return referrer.url.GetOrigin().spec(); |
| 42 case ReferrerPolicyStrictOriginWhenCrossOrigin: |
| 43 if (is_downgrade) |
| 44 return std::string(); |
| 45 if (referrer.url.GetOrigin() != destination.GetOrigin()) |
| 46 return referrer.url.GetOrigin().spec(); |
| 47 return referrer.url.GetAsReferrer().spec(); |
| 34 } | 48 } |
| 35 NOTREACHED(); | 49 NOTREACHED(); |
| 36 return std::string(); | 50 return std::string(); |
| 37 } | 51 } |
| 38 | 52 |
| 39 net::URLRequest::ReferrerPolicy PolicyForNavigation( | 53 net::URLRequest::ReferrerPolicy PolicyForNavigation( |
| 40 const GURL& destination, | 54 const GURL& destination, |
| 41 const web::Referrer& referrer) { | 55 const web::Referrer& referrer) { |
| 42 // Based on the matching logic in content's | 56 // Based on the matching logic in content's |
| 43 // resource_dispatcher_host_impl.cc | 57 // resource_dispatcher_host_impl.cc |
| 44 switch (referrer.policy) { | 58 switch (referrer.policy) { |
| 45 case ReferrerPolicyAlways: | 59 case ReferrerPolicyAlways: |
| 60 return net::URLRequest::NEVER_CLEAR_REFERRER; |
| 46 case ReferrerPolicyNever: | 61 case ReferrerPolicyNever: |
| 62 return net::URLRequest::NO_REFERRER; |
| 47 case ReferrerPolicyOrigin: | 63 case ReferrerPolicyOrigin: |
| 48 return net::URLRequest::NEVER_CLEAR_REFERRER; | 64 return net::URLRequest::ORIGIN; |
| 49 case ReferrerPolicyNoReferrerWhenDowngrade: | 65 case ReferrerPolicyNoReferrerWhenDowngrade: |
| 50 case ReferrerPolicyDefault: | 66 case ReferrerPolicyDefault: |
| 51 return net::URLRequest:: | 67 return net::URLRequest:: |
| 52 CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; | 68 CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
| 53 case ReferrerPolicyOriginWhenCrossOrigin: | 69 case ReferrerPolicyOriginWhenCrossOrigin: |
| 54 return net::URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN; | 70 return net::URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN; |
| 71 case ReferrerPolicySameOrigin: |
| 72 return net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN; |
| 73 case ReferrerPolicyStrictOrigin: |
| 74 return net::URLRequest:: |
| 75 ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
| 76 case ReferrerPolicyStrictOriginWhenCrossOrigin: |
| 77 return net::URLRequest:: |
| 78 REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN; |
| 55 } | 79 } |
| 56 NOTREACHED(); | 80 NOTREACHED(); |
| 57 return net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; | 81 return net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
| 58 } | 82 } |
| 59 | 83 |
| 60 ReferrerPolicy ReferrerPolicyFromString(const std::string& policy) { | 84 ReferrerPolicy ReferrerPolicyFromString(const std::string& policy) { |
| 61 // https://w3c.github.io/webappsec-referrer-policy/#determine-policy-for-token | 85 // https://w3c.github.io/webappsec-referrer-policy/#determine-policy-for-token |
| 62 if (policy == "never" || policy == "no-referrer") | 86 if (policy == "never" || policy == "no-referrer") |
| 63 return ReferrerPolicyNever; | 87 return ReferrerPolicyNever; |
| 64 if (policy == "origin") | 88 if (policy == "origin") |
| 65 return ReferrerPolicyOrigin; | 89 return ReferrerPolicyOrigin; |
| 66 if (policy == "default" || policy == "no-referrer-when-downgrade") | 90 if (policy == "default" || policy == "no-referrer-when-downgrade") |
| 67 return ReferrerPolicyNoReferrerWhenDowngrade; | 91 return ReferrerPolicyNoReferrerWhenDowngrade; |
| 68 if (policy == "origin-when-cross-origin") | 92 if (policy == "origin-when-cross-origin") |
| 69 return ReferrerPolicyOriginWhenCrossOrigin; | 93 return ReferrerPolicyOriginWhenCrossOrigin; |
| 70 if (policy == "always" || policy == "unsafe-url") | 94 if (policy == "always" || policy == "unsafe-url") |
| 71 return ReferrerPolicyAlways; | 95 return ReferrerPolicyAlways; |
| 72 // Note that this is *not* Default; per spec, anything unknown is Never. | 96 if (policy == "same-origin") |
| 73 return web::ReferrerPolicyNever; | 97 return ReferrerPolicySameOrigin; |
| 98 if (policy == "strict-origin") |
| 99 return ReferrerPolicyStrictOrigin; |
| 100 if (policy == "strict-origin-when-cross-origin") |
| 101 return ReferrerPolicyStrictOriginWhenCrossOrigin; |
| 102 return ReferrerPolicyDefault; |
| 74 } | 103 } |
| 75 | 104 |
| 76 } // namespace web | 105 } // namespace web |
| OLD | NEW |