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