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