Index: ios/web/public/referrer_util.cc |
diff --git a/ios/web/public/referrer_util.cc b/ios/web/public/referrer_util.cc |
index 4bee17fd304f579acb50cb775e131d6d14751b7b..f5722933aff4726dbd53525243e991c5a13837cb 100644 |
--- a/ios/web/public/referrer_util.cc |
+++ b/ios/web/public/referrer_util.cc |
@@ -31,6 +31,20 @@ std::string ReferrerHeaderValueForNavigation( |
if (referrer.url.GetOrigin() != destination.GetOrigin()) |
return referrer.url.GetOrigin().spec(); |
return referrer.url.GetAsReferrer().spec(); |
+ case ReferrerPolicySameOrigin: |
+ if (referrer.url.GetOrigin() != destination.GetOrigin()) |
+ return std::string(); |
+ return referrer.url.GetAsReferrer().spec(); |
+ case ReferrerPolicyStrictOrigin: |
+ if (is_downgrade) |
+ return std::string(); |
+ return referrer.url.GetOrigin().spec(); |
+ case ReferrerPolicyStrictOriginWhenCrossOrigin: |
+ if (is_downgrade) |
+ return std::string(); |
+ if (referrer.url.GetOrigin() != destination.GetOrigin()) |
+ return referrer.url.GetOrigin().spec(); |
+ return referrer.url.GetAsReferrer().spec(); |
} |
NOTREACHED(); |
return std::string(); |
@@ -43,15 +57,25 @@ net::URLRequest::ReferrerPolicy PolicyForNavigation( |
// resource_dispatcher_host_impl.cc |
switch (referrer.policy) { |
case ReferrerPolicyAlways: |
+ return net::URLRequest::NEVER_CLEAR_REFERRER; |
case ReferrerPolicyNever: |
+ return net::URLRequest::NO_REFERRER; |
case ReferrerPolicyOrigin: |
- return net::URLRequest::NEVER_CLEAR_REFERRER; |
+ return net::URLRequest::ORIGIN; |
case ReferrerPolicyNoReferrerWhenDowngrade: |
case ReferrerPolicyDefault: |
return net::URLRequest:: |
CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
case ReferrerPolicyOriginWhenCrossOrigin: |
return net::URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN; |
+ case ReferrerPolicySameOrigin: |
+ return net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN; |
+ case ReferrerPolicyStrictOrigin: |
+ return net::URLRequest:: |
+ ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
+ case ReferrerPolicyStrictOriginWhenCrossOrigin: |
+ return net::URLRequest:: |
+ REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN; |
} |
NOTREACHED(); |
return net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; |
@@ -69,8 +93,13 @@ ReferrerPolicy ReferrerPolicyFromString(const std::string& policy) { |
return ReferrerPolicyOriginWhenCrossOrigin; |
if (policy == "always" || policy == "unsafe-url") |
return ReferrerPolicyAlways; |
- // Note that this is *not* Default; per spec, anything unknown is Never. |
- return web::ReferrerPolicyNever; |
+ if (policy == "same-origin") |
+ return ReferrerPolicySameOrigin; |
+ if (policy == "strict-origin") |
+ return ReferrerPolicyStrictOrigin; |
+ if (policy == "strict-origin-when-cross-origin") |
+ return ReferrerPolicyStrictOriginWhenCrossOrigin; |
+ return ReferrerPolicyDefault; |
} |
} // namespace web |