OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 case kReferrerPolicyOriginWhenCrossOrigin: { | 116 case kReferrerPolicyOriginWhenCrossOrigin: { |
117 RefPtr<SecurityOrigin> referrer_origin = | 117 RefPtr<SecurityOrigin> referrer_origin = |
118 SecurityOrigin::Create(referrer_url); | 118 SecurityOrigin::Create(referrer_url); |
119 RefPtr<SecurityOrigin> url_origin = SecurityOrigin::Create(url); | 119 RefPtr<SecurityOrigin> url_origin = SecurityOrigin::Create(url); |
120 if (!url_origin->IsSameSchemeHostPort(referrer_origin.Get())) { | 120 if (!url_origin->IsSameSchemeHostPort(referrer_origin.Get())) { |
121 String origin = referrer_origin->ToString(); | 121 String origin = referrer_origin->ToString(); |
122 return Referrer(origin + "/", referrer_policy_no_default); | 122 return Referrer(origin + "/", referrer_policy_no_default); |
123 } | 123 } |
124 break; | 124 break; |
125 } | 125 } |
126 case kReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin: { | 126 case kReferrerPolicySameOrigin: { |
127 // If the flag is enabled, and we're dealing with a cross-origin request, | |
128 // strip it. Otherwise fall through to NoReferrerWhenDowngrade behavior. | |
129 RefPtr<SecurityOrigin> referrer_origin = | 127 RefPtr<SecurityOrigin> referrer_origin = |
130 SecurityOrigin::Create(referrer_url); | 128 SecurityOrigin::Create(referrer_url); |
131 RefPtr<SecurityOrigin> url_origin = SecurityOrigin::Create(url); | 129 RefPtr<SecurityOrigin> url_origin = SecurityOrigin::Create(url); |
| 130 if (!url_origin->IsSameSchemeHostPort(referrer_origin.Get())) { |
| 131 return Referrer(Referrer::NoReferrer(), referrer_policy_no_default); |
| 132 } |
| 133 return Referrer(referrer, referrer_policy_no_default); |
| 134 } |
| 135 case kReferrerPolicyStrictOrigin: { |
| 136 String origin = SecurityOrigin::Create(referrer_url)->ToString(); |
| 137 return Referrer(ShouldHideReferrer(url, referrer_url) |
| 138 ? Referrer::NoReferrer() |
| 139 : origin + "/", |
| 140 referrer_policy_no_default); |
| 141 } |
| 142 case kReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin: { |
| 143 RefPtr<SecurityOrigin> referrer_origin = |
| 144 SecurityOrigin::Create(referrer_url); |
| 145 RefPtr<SecurityOrigin> url_origin = SecurityOrigin::Create(url); |
132 if (!url_origin->IsSameSchemeHostPort(referrer_origin.Get())) { | 146 if (!url_origin->IsSameSchemeHostPort(referrer_origin.Get())) { |
133 String origin = referrer_origin->ToString(); | 147 String origin = referrer_origin->ToString(); |
134 return Referrer(ShouldHideReferrer(url, referrer_url) | 148 return Referrer(ShouldHideReferrer(url, referrer_url) |
135 ? Referrer::NoReferrer() | 149 ? Referrer::NoReferrer() |
136 : origin + "/", | 150 : origin + "/", |
137 referrer_policy_no_default); | 151 referrer_policy_no_default); |
138 } | 152 } |
139 break; | 153 break; |
140 } | 154 } |
141 case kReferrerPolicyNoReferrerWhenDowngrade: | 155 case kReferrerPolicyNoReferrerWhenDowngrade: |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 if (EqualIgnoringASCIICase(policy, "origin")) { | 293 if (EqualIgnoringASCIICase(policy, "origin")) { |
280 *result = kReferrerPolicyOrigin; | 294 *result = kReferrerPolicyOrigin; |
281 return true; | 295 return true; |
282 } | 296 } |
283 if (EqualIgnoringASCIICase(policy, "origin-when-cross-origin") || | 297 if (EqualIgnoringASCIICase(policy, "origin-when-cross-origin") || |
284 (support_legacy_keywords && | 298 (support_legacy_keywords && |
285 EqualIgnoringASCIICase(policy, "origin-when-crossorigin"))) { | 299 EqualIgnoringASCIICase(policy, "origin-when-crossorigin"))) { |
286 *result = kReferrerPolicyOriginWhenCrossOrigin; | 300 *result = kReferrerPolicyOriginWhenCrossOrigin; |
287 return true; | 301 return true; |
288 } | 302 } |
| 303 if (EqualIgnoringASCIICase(policy, "same-origin")) { |
| 304 *result = kReferrerPolicySameOrigin; |
| 305 return true; |
| 306 } |
| 307 if (EqualIgnoringASCIICase(policy, "strict-origin")) { |
| 308 *result = kReferrerPolicyStrictOrigin; |
| 309 return true; |
| 310 } |
| 311 if (EqualIgnoringASCIICase(policy, "strict-origin-when-cross-origin")) { |
| 312 *result = kReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin; |
| 313 return true; |
| 314 } |
289 if (EqualIgnoringASCIICase(policy, "no-referrer-when-downgrade") || | 315 if (EqualIgnoringASCIICase(policy, "no-referrer-when-downgrade") || |
290 (support_legacy_keywords && EqualIgnoringASCIICase(policy, "default"))) { | 316 (support_legacy_keywords && EqualIgnoringASCIICase(policy, "default"))) { |
291 *result = kReferrerPolicyNoReferrerWhenDowngrade; | 317 *result = kReferrerPolicyNoReferrerWhenDowngrade; |
292 return true; | 318 return true; |
293 } | 319 } |
294 return false; | 320 return false; |
295 } | 321 } |
296 | 322 |
297 bool SecurityPolicy::ReferrerPolicyFromHeaderValue( | 323 bool SecurityPolicy::ReferrerPolicyFromHeaderValue( |
298 const String& header_value, | 324 const String& header_value, |
(...skipping 13 matching lines...) Expand all Loading... |
312 } | 338 } |
313 | 339 |
314 if (referrer_policy == kReferrerPolicyDefault) | 340 if (referrer_policy == kReferrerPolicyDefault) |
315 return false; | 341 return false; |
316 | 342 |
317 *result = referrer_policy; | 343 *result = referrer_policy; |
318 return true; | 344 return true; |
319 } | 345 } |
320 | 346 |
321 } // namespace blink | 347 } // namespace blink |
OLD | NEW |