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