mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
Bug 1501206 - Introduce a new function ReferrerPolicyToString() r=ckerschb
We may need this function to convert ReferrerPolicy enum to string then we can display referrer policy applied to a request. MozReview-Commit-ID: B3xPAiykcOV Differential Revision: https://phabricator.services.mozilla.com/D9664 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
feb5e5a4da
commit
59d59ec231
@ -1128,14 +1128,38 @@ nsGenericHTMLElement::ParseReferrerAttribute(const nsAString& aString,
|
||||
nsAttrValue& aResult)
|
||||
{
|
||||
static const nsAttrValue::EnumTable kReferrerTable[] = {
|
||||
{ net::kRPS_No_Referrer, static_cast<int16_t>(net::RP_No_Referrer) },
|
||||
{ net::kRPS_Origin, static_cast<int16_t>(net::RP_Origin) },
|
||||
{ net::kRPS_Origin_When_Cross_Origin, static_cast<int16_t>(net::RP_Origin_When_Crossorigin) },
|
||||
{ net::kRPS_No_Referrer_When_Downgrade, static_cast<int16_t>(net::RP_No_Referrer_When_Downgrade) },
|
||||
{ net::kRPS_Unsafe_URL, static_cast<int16_t>(net::RP_Unsafe_URL) },
|
||||
{ net::kRPS_Strict_Origin, static_cast<int16_t>(net::RP_Strict_Origin) },
|
||||
{ net::kRPS_Same_Origin, static_cast<int16_t>(net::RP_Same_Origin) },
|
||||
{ net::kRPS_Strict_Origin_When_Cross_Origin, static_cast<int16_t>(net::RP_Strict_Origin_When_Cross_Origin) },
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_No_Referrer),
|
||||
static_cast<int16_t>(net::RP_No_Referrer)
|
||||
},
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_Origin),
|
||||
static_cast<int16_t>(net::RP_Origin)
|
||||
},
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_Origin_When_Crossorigin),
|
||||
static_cast<int16_t>(net::RP_Origin_When_Crossorigin)
|
||||
},
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_No_Referrer_When_Downgrade),
|
||||
static_cast<int16_t>(net::RP_No_Referrer_When_Downgrade)
|
||||
},
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_Unsafe_URL),
|
||||
static_cast<int16_t>(net::RP_Unsafe_URL)
|
||||
},
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_Strict_Origin),
|
||||
static_cast<int16_t>(net::RP_Strict_Origin)
|
||||
},
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_Same_Origin),
|
||||
static_cast<int16_t>(net::RP_Same_Origin)
|
||||
},
|
||||
{
|
||||
ReferrerPolicyToString(net::RP_Strict_Origin_When_Cross_Origin),
|
||||
static_cast<int16_t>(net::RP_Strict_Origin_When_Cross_Origin)
|
||||
},
|
||||
{ nullptr, 0 }
|
||||
};
|
||||
return aResult.ParseEnumValue(aString, kReferrerTable, false);
|
||||
|
@ -41,33 +41,31 @@ enum ReferrerPolicy {
|
||||
RP_Unset = nsIHttpChannel::REFERRER_POLICY_UNSET,
|
||||
};
|
||||
|
||||
/* spec tokens: never no-referrer */
|
||||
// Referrer Policy spec tokens. Order matters here, make sure it matches the
|
||||
// order as in nsIHttpChannel.idl
|
||||
static const char* kReferrerPolicyString[] = {
|
||||
"", // REFERRER_POLICY_UNSET
|
||||
"no-referrer-when-downgrade", // REFERRER_POLICY_NO_REFERRER_WHEN_DOWNGRADE
|
||||
"no-referrer", // REFERRER_POLICY_NO_REFERRER
|
||||
"origin", // REFERRER_POLICY_ORIGIN
|
||||
"origin-when-cross-origin", // REFERRER_POLICY_ORIGIN_WHEN_XORIGIN
|
||||
"unsafe-url", // REFERRER_POLICY_UNSAFE_URL
|
||||
"same-origin", // REFERRER_POLICY_SAME_ORIGIN
|
||||
"strict-origin", // REFERRER_POLICY_STRICT_ORIGIN
|
||||
"strict-origin-when-cross-origin" // REFERRER_POLICY_STRICT_ORIGIN_WHEN_XORIGIN
|
||||
};
|
||||
|
||||
/* spec tokens: never */
|
||||
const char kRPS_Never[] = "never";
|
||||
const char kRPS_No_Referrer[] = "no-referrer";
|
||||
|
||||
/* spec tokens: origin */
|
||||
const char kRPS_Origin[] = "origin";
|
||||
|
||||
/* spec tokens: default no-referrer-when-downgrade */
|
||||
/* spec tokens: default */
|
||||
const char kRPS_Default[] = "default";
|
||||
const char kRPS_No_Referrer_When_Downgrade[] = "no-referrer-when-downgrade";
|
||||
|
||||
/* spec tokens: origin-when-cross-origin */
|
||||
const char kRPS_Origin_When_Cross_Origin[] = "origin-when-cross-origin";
|
||||
/* spec tokens: origin-when-crossorigin */
|
||||
const char kRPS_Origin_When_Crossorigin[] = "origin-when-crossorigin";
|
||||
|
||||
/* spec tokens: same-origin */
|
||||
const char kRPS_Same_Origin[] = "same-origin";
|
||||
|
||||
/* spec tokens: strict-origin */
|
||||
const char kRPS_Strict_Origin[] = "strict-origin";
|
||||
|
||||
/* spec tokens: strict-origin-when-cross-origin */
|
||||
const char kRPS_Strict_Origin_When_Cross_Origin[] = "strict-origin-when-cross-origin";
|
||||
|
||||
/* spec tokens: always unsafe-url */
|
||||
/* spec tokens: always */
|
||||
const char kRPS_Always[] = "always";
|
||||
const char kRPS_Unsafe_URL[] = "unsafe-url";
|
||||
|
||||
inline ReferrerPolicy
|
||||
ReferrerPolicyFromString(const nsAString& content)
|
||||
@ -80,32 +78,25 @@ ReferrerPolicyFromString(const nsAString& content)
|
||||
ToLowerCase(lowerContent);
|
||||
// This is implemented step by step as described in the Referrer Policy
|
||||
// specification, section "Determine token's Policy".
|
||||
if (lowerContent.EqualsLiteral(kRPS_Never) ||
|
||||
lowerContent.EqualsLiteral(kRPS_No_Referrer)) {
|
||||
|
||||
uint16_t numStr =
|
||||
(sizeof(kReferrerPolicyString) / sizeof(kReferrerPolicyString[0]));
|
||||
for (uint16_t i = 0; i < numStr; i++) {
|
||||
if (lowerContent.EqualsASCII(kReferrerPolicyString[i])) {
|
||||
return static_cast<ReferrerPolicy>(i);
|
||||
}
|
||||
}
|
||||
|
||||
if (lowerContent.EqualsLiteral(kRPS_Never)) {
|
||||
return RP_No_Referrer;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Origin)) {
|
||||
return RP_Origin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Default) ||
|
||||
lowerContent.EqualsLiteral(kRPS_No_Referrer_When_Downgrade)) {
|
||||
if (lowerContent.EqualsLiteral(kRPS_Default)) {
|
||||
return RP_No_Referrer_When_Downgrade;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Origin_When_Cross_Origin) ||
|
||||
lowerContent.EqualsLiteral(kRPS_Origin_When_Crossorigin)) {
|
||||
if (lowerContent.EqualsLiteral(kRPS_Origin_When_Crossorigin)) {
|
||||
return RP_Origin_When_Crossorigin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Same_Origin)) {
|
||||
return RP_Same_Origin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Strict_Origin)) {
|
||||
return RP_Strict_Origin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Strict_Origin_When_Cross_Origin)) {
|
||||
return RP_Strict_Origin_When_Cross_Origin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Always) ||
|
||||
lowerContent.EqualsLiteral(kRPS_Unsafe_URL)) {
|
||||
if (lowerContent.EqualsLiteral(kRPS_Always)) {
|
||||
return RP_Unsafe_URL;
|
||||
}
|
||||
// Spec says if none of the previous match, use empty string.
|
||||
@ -125,29 +116,12 @@ AttributeReferrerPolicyFromString(const nsAString& content)
|
||||
nsString lowerContent(content);
|
||||
ToLowerCase(lowerContent);
|
||||
|
||||
if (lowerContent.EqualsLiteral(kRPS_No_Referrer)) {
|
||||
return RP_No_Referrer;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Origin)) {
|
||||
return RP_Origin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_No_Referrer_When_Downgrade)) {
|
||||
return RP_No_Referrer_When_Downgrade;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Origin_When_Cross_Origin)) {
|
||||
return RP_Origin_When_Crossorigin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Unsafe_URL)) {
|
||||
return RP_Unsafe_URL;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Strict_Origin)) {
|
||||
return RP_Strict_Origin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Same_Origin)) {
|
||||
return RP_Same_Origin;
|
||||
}
|
||||
if (lowerContent.EqualsLiteral(kRPS_Strict_Origin_When_Cross_Origin)) {
|
||||
return RP_Strict_Origin_When_Cross_Origin;
|
||||
uint16_t numStr =
|
||||
(sizeof(kReferrerPolicyString) / sizeof(kReferrerPolicyString[0]));
|
||||
for (uint16_t i = 0; i < numStr; i++) {
|
||||
if (lowerContent.EqualsASCII(kReferrerPolicyString[i])) {
|
||||
return static_cast<ReferrerPolicy>(i);
|
||||
}
|
||||
}
|
||||
|
||||
// Spec says invalid value default is empty string state
|
||||
@ -155,6 +129,12 @@ AttributeReferrerPolicyFromString(const nsAString& content)
|
||||
return RP_Unset;
|
||||
}
|
||||
|
||||
inline const char*
|
||||
ReferrerPolicyToString(ReferrerPolicy aPolicy)
|
||||
{
|
||||
return kReferrerPolicyString[static_cast<uint32_t>(aPolicy)];
|
||||
}
|
||||
|
||||
} // namespace net
|
||||
} // namespace mozilla
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user