Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp

Issue 2918313002: Implement new referrer policies (Closed)
Patch Set: update public/platform/OWNERS per presubmit Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 483674f9eed09f3656642f744baae31792740613..0b411ea31196cb4d825c624422ecf218fb3715e4 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;

Powered by Google App Engine
This is Rietveld 408576698