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; |
kkhorimoto
2017/06/08 00:56:46
It looks like we were intentionally using Never he
estark
2017/06/08 18:42:57
Sorry, I should have explained this, but quite a w
| |
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 |