| 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 e915a51637d2f0c80b3b350902a535e49c4ed936..542f6d4175d394a6442e0fe96331d6450d7f11b3 100644
|
| --- a/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp
|
| +++ b/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp
|
| @@ -46,6 +46,11 @@ using OriginAccessWhiteList = Vector<OriginAccessEntry>;
|
| using OriginAccessMap = HashMap<String, std::unique_ptr<OriginAccessWhiteList>>;
|
| using OriginSet = HashSet<String>;
|
|
|
| +enum ReferrerPolicyLegacyKeywordsSupport {
|
| + SupportReferrerPolicyLegacyKeywords,
|
| + DoNotSupportReferrerPolicyLegacyKeywords,
|
| +};
|
| +
|
| static OriginAccessMap& originAccessMap()
|
| {
|
| DEFINE_STATIC_LOCAL(OriginAccessMap, originAccessMap, ());
|
| @@ -58,6 +63,34 @@ static OriginSet& trustworthyOriginSet()
|
| return trustworthyOriginSet;
|
| }
|
|
|
| +static bool referrerPolicyFromStringImpl(const String& policy, ReferrerPolicyLegacyKeywordsSupport legacyKeywordsSupport, ReferrerPolicy* result)
|
| +{
|
| + DCHECK(!policy.isNull());
|
| + bool supportLegacyKeywords = (legacyKeywordsSupport == SupportReferrerPolicyLegacyKeywords);
|
| +
|
| + if (equalIgnoringCase(policy, "no-referrer") || (supportLegacyKeywords && equalIgnoringCase(policy, "never"))) {
|
| + *result = ReferrerPolicyNever;
|
| + return true;
|
| + }
|
| + if (equalIgnoringCase(policy, "unsafe-url") || (supportLegacyKeywords && equalIgnoringCase(policy, "always"))) {
|
| + *result = ReferrerPolicyAlways;
|
| + return true;
|
| + }
|
| + if (equalIgnoringCase(policy, "origin")) {
|
| + *result = ReferrerPolicyOrigin;
|
| + return true;
|
| + }
|
| + if (equalIgnoringCase(policy, "origin-when-cross-origin") || (supportLegacyKeywords && equalIgnoringCase(policy, "origin-when-crossorigin"))) {
|
| + *result = ReferrerPolicyOriginWhenCrossOrigin;
|
| + return true;
|
| + }
|
| + if (equalIgnoringCase(policy, "no-referrer-when-downgrade") || (supportLegacyKeywords && equalIgnoringCase(policy, "default"))) {
|
| + *result = ReferrerPolicyNoReferrerWhenDowngrade;
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| void SecurityPolicy::init()
|
| {
|
| originAccessMap();
|
| @@ -225,29 +258,12 @@ void SecurityPolicy::resetOriginAccessWhitelists()
|
|
|
| bool SecurityPolicy::referrerPolicyFromString(const String& policy, ReferrerPolicy* result)
|
| {
|
| - ASSERT(!policy.isNull());
|
| + return referrerPolicyFromStringImpl(policy, DoNotSupportReferrerPolicyLegacyKeywords, result);
|
| +}
|
|
|
| - if (equalIgnoringCase(policy, "no-referrer") || equalIgnoringCase(policy, "never")) {
|
| - *result = ReferrerPolicyNever;
|
| - return true;
|
| - }
|
| - if (equalIgnoringCase(policy, "unsafe-url") || equalIgnoringCase(policy, "always")) {
|
| - *result = ReferrerPolicyAlways;
|
| - return true;
|
| - }
|
| - if (equalIgnoringCase(policy, "origin")) {
|
| - *result = ReferrerPolicyOrigin;
|
| - return true;
|
| - }
|
| - if (equalIgnoringCase(policy, "origin-when-cross-origin") || equalIgnoringCase(policy, "origin-when-crossorigin")) {
|
| - *result = ReferrerPolicyOriginWhenCrossOrigin;
|
| - return true;
|
| - }
|
| - if (equalIgnoringCase(policy, "no-referrer-when-downgrade") || equalIgnoringCase(policy, "default")) {
|
| - *result = ReferrerPolicyNoReferrerWhenDowngrade;
|
| - return true;
|
| - }
|
| - return false;
|
| +bool SecurityPolicy::referrerPolicyFromStringWithLegacyKeywords(const String& policy, ReferrerPolicy* result)
|
| +{
|
| + return referrerPolicyFromStringImpl(policy, SupportReferrerPolicyLegacyKeywords, result);
|
| }
|
|
|
| } // namespace blink
|
|
|