Index: third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp |
diff --git a/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp b/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp |
index ef229d26f6d9c6961f968a99d3b5723c3ca2629c..aea0dc6c75e084272847f1db5037ef45bd422961 100644 |
--- a/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp |
+++ b/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp |
@@ -123,9 +123,23 @@ Referrer SecurityPolicy::GenerateReferrer(ReferrerPolicy referrer_policy, |
} |
break; |
} |
+ case kReferrerPolicySameOrigin: { |
+ RefPtr<SecurityOrigin> referrer_origin = |
+ SecurityOrigin::Create(referrer_url); |
+ RefPtr<SecurityOrigin> url_origin = SecurityOrigin::Create(url); |
+ if (!url_origin->IsSameSchemeHostPort(referrer_origin.Get())) { |
+ return Referrer(Referrer::NoReferrer(), referrer_policy_no_default); |
+ } |
+ return Referrer(referrer, referrer_policy_no_default); |
+ } |
+ case kReferrerPolicyStrictOrigin: { |
+ String origin = SecurityOrigin::Create(referrer_url)->ToString(); |
+ return Referrer(ShouldHideReferrer(url, referrer_url) |
+ ? Referrer::NoReferrer() |
+ : origin + "/", |
+ referrer_policy_no_default); |
+ } |
case kReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin: { |
- // If the flag is enabled, and we're dealing with a cross-origin request, |
- // strip it. Otherwise fall through to NoReferrerWhenDowngrade behavior. |
RefPtr<SecurityOrigin> referrer_origin = |
SecurityOrigin::Create(referrer_url); |
RefPtr<SecurityOrigin> url_origin = SecurityOrigin::Create(url); |
@@ -286,6 +300,18 @@ bool SecurityPolicy::ReferrerPolicyFromString( |
*result = kReferrerPolicyOriginWhenCrossOrigin; |
return true; |
} |
+ if (EqualIgnoringASCIICase(policy, "same-origin")) { |
+ *result = kReferrerPolicySameOrigin; |
+ return true; |
+ } |
+ if (EqualIgnoringASCIICase(policy, "strict-origin")) { |
+ *result = kReferrerPolicyStrictOrigin; |
+ return true; |
+ } |
+ if (EqualIgnoringASCIICase(policy, "strict-origin-when-cross-origin")) { |
+ *result = kReferrerPolicyNoReferrerWhenDowngradeOriginWhenCrossOrigin; |
+ return true; |
+ } |
if (EqualIgnoringASCIICase(policy, "no-referrer-when-downgrade") || |
(support_legacy_keywords && EqualIgnoringASCIICase(policy, "default"))) { |
*result = kReferrerPolicyNoReferrerWhenDowngrade; |