Index: content/common/feature_policy/feature_policy.cc |
diff --git a/content/common/feature_policy/feature_policy.cc b/content/common/feature_policy/feature_policy.cc |
index 5ebdd7114f8e40fbe3d876e39599a798d21de0c5..f045f5a827524f01c6829e5785a6c2727207463a 100644 |
--- a/content/common/feature_policy/feature_policy.cc |
+++ b/content/common/feature_policy/feature_policy.cc |
@@ -12,48 +12,6 @@ namespace content { |
namespace { |
-// Given a string name, return the matching feature struct, or nullptr if it is |
-// not the name of a policy-controlled feature. |
-blink::WebFeaturePolicyFeature FeatureForName( |
- const std::string& feature_name, |
- const FeaturePolicy::FeatureList& features) { |
- for (const auto& feature_mapping : features) { |
- if (feature_name == feature_mapping.second->feature_name) |
- return feature_mapping.first; |
- } |
- return blink::WebFeaturePolicyFeature::NotFound; |
-} |
- |
-// Definitions of all features controlled by Feature Policy should appear here. |
-const FeaturePolicy::Feature kDocumentCookie{ |
- "cookie", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kDocumentDomain{ |
- "domain", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kDocumentWrite{ |
- "docwrite", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kFullscreenFeature{ |
- "fullscreen", FeaturePolicy::FeatureDefault::EnableForSelf}; |
-const FeaturePolicy::Feature kGeolocationFeature{ |
- "geolocation", FeaturePolicy::FeatureDefault::EnableForSelf}; |
-const FeaturePolicy::Feature kMidiFeature{ |
- "midi", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kNotificationsFeature{ |
- "notifications", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kPaymentFeature{ |
- "payment", FeaturePolicy::FeatureDefault::EnableForSelf}; |
-const FeaturePolicy::Feature kPushFeature{ |
- "push", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kSyncScript{ |
- "sync-script", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kSyncXHR{ |
- "sync-xhr", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kUsermedia{ |
- "usermedia", FeaturePolicy::FeatureDefault::EnableForAll}; |
-const FeaturePolicy::Feature kVibrateFeature{ |
- "vibrate", FeaturePolicy::FeatureDefault::EnableForSelf}; |
-const FeaturePolicy::Feature kWebRTC{ |
- "webrtc", FeaturePolicy::FeatureDefault::EnableForAll}; |
- |
// Extracts a Whitelist from a ParsedFeaturePolicyDeclaration. |
std::unique_ptr<FeaturePolicy::Whitelist> WhitelistFromDeclaration( |
const ParsedFeaturePolicyDeclaration& parsed_declaration) { |
@@ -72,10 +30,10 @@ ParsedFeaturePolicyDeclaration::ParsedFeaturePolicyDeclaration() |
: matches_all_origins(false) {} |
ParsedFeaturePolicyDeclaration::ParsedFeaturePolicyDeclaration( |
- std::string feature_name, |
+ blink::WebFeaturePolicyFeature feature, |
bool matches_all_origins, |
std::vector<url::Origin> origins) |
- : feature_name(feature_name), |
+ : feature(feature), |
matches_all_origins(matches_all_origins), |
origins(origins) {} |
@@ -146,19 +104,18 @@ bool FeaturePolicy::IsFeatureEnabledForOrigin( |
blink::WebFeaturePolicyFeature feature, |
const url::Origin& origin) const { |
DCHECK(base::ContainsKey(feature_list_, feature)); |
- const FeaturePolicy::Feature* feature_definition = feature_list_.at(feature); |
+ const FeaturePolicy::FeatureDefault default_policy = |
+ feature_list_.at(feature); |
DCHECK(base::ContainsKey(inherited_policies_, feature)); |
if (!inherited_policies_.at(feature)) |
return false; |
auto whitelist = whitelists_.find(feature); |
if (whitelist != whitelists_.end()) |
return whitelist->second->Contains(origin); |
- if (feature_definition->default_policy == |
- FeaturePolicy::FeatureDefault::EnableForAll) { |
+ if (default_policy == FeaturePolicy::FeatureDefault::EnableForAll) { |
return true; |
} |
- if (feature_definition->default_policy == |
- FeaturePolicy::FeatureDefault::EnableForSelf) { |
+ if (default_policy == FeaturePolicy::FeatureDefault::EnableForSelf) { |
// TODO(iclelland): Remove the pointer equality check once it is possible to |
// compare opaque origins successfully against themselves. |
// https://crbug.com/690520 |
@@ -172,10 +129,8 @@ void FeaturePolicy::SetHeaderPolicy( |
DCHECK(whitelists_.empty()); |
for (const ParsedFeaturePolicyDeclaration& parsed_declaration : |
parsed_header) { |
- blink::WebFeaturePolicyFeature feature = |
- FeatureForName(parsed_declaration.feature_name, feature_list_); |
- if (feature == blink::WebFeaturePolicyFeature::NotFound) |
- continue; |
+ blink::WebFeaturePolicyFeature feature = parsed_declaration.feature; |
+ DCHECK(feature != blink::WebFeaturePolicyFeature::NotFound); |
whitelists_[feature] = WhitelistFromDeclaration(parsed_declaration); |
} |
} |
@@ -219,8 +174,7 @@ void FeaturePolicy::AddContainerPolicy( |
// If a feature is enabled in the parent frame, and the parent chooses to |
// delegate it to the child frame, using the iframe attribute, then the |
// feature should be enabled in the child frame. |
- blink::WebFeaturePolicyFeature feature = |
- FeatureForName(parsed_declaration.feature_name, feature_list_); |
+ blink::WebFeaturePolicyFeature feature = parsed_declaration.feature; |
if (feature == blink::WebFeaturePolicyFeature::NotFound) |
continue; |
if (WhitelistFromDeclaration(parsed_declaration)->Contains(origin_) && |
@@ -234,22 +188,35 @@ void FeaturePolicy::AddContainerPolicy( |
// static |
const FeaturePolicy::FeatureList& FeaturePolicy::GetDefaultFeatureList() { |
- CR_DEFINE_STATIC_LOCAL( |
- FeatureList, default_feature_list, |
- ({{blink::WebFeaturePolicyFeature::DocumentCookie, &kDocumentCookie}, |
- {blink::WebFeaturePolicyFeature::DocumentDomain, &kDocumentDomain}, |
- {blink::WebFeaturePolicyFeature::DocumentWrite, &kDocumentWrite}, |
- {blink::WebFeaturePolicyFeature::Fullscreen, &kFullscreenFeature}, |
- {blink::WebFeaturePolicyFeature::Geolocation, &kGeolocationFeature}, |
- {blink::WebFeaturePolicyFeature::MidiFeature, &kMidiFeature}, |
- {blink::WebFeaturePolicyFeature::Notifications, &kNotificationsFeature}, |
- {blink::WebFeaturePolicyFeature::Payment, &kPaymentFeature}, |
- {blink::WebFeaturePolicyFeature::Push, &kPushFeature}, |
- {blink::WebFeaturePolicyFeature::SyncScript, &kSyncScript}, |
- {blink::WebFeaturePolicyFeature::SyncXHR, &kSyncXHR}, |
- {blink::WebFeaturePolicyFeature::Usermedia, &kUsermedia}, |
- {blink::WebFeaturePolicyFeature::Vibrate, &kVibrateFeature}, |
- {blink::WebFeaturePolicyFeature::WebRTC, &kWebRTC}})); |
+ CR_DEFINE_STATIC_LOCAL(FeatureList, default_feature_list, |
+ ({{blink::WebFeaturePolicyFeature::DocumentCookie, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::DocumentDomain, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::DocumentWrite, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::Fullscreen, |
+ FeaturePolicy::FeatureDefault::EnableForSelf}, |
+ {blink::WebFeaturePolicyFeature::Geolocation, |
+ FeaturePolicy::FeatureDefault::EnableForSelf}, |
+ {blink::WebFeaturePolicyFeature::MidiFeature, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::Notifications, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::Payment, |
+ FeaturePolicy::FeatureDefault::EnableForSelf}, |
+ {blink::WebFeaturePolicyFeature::Push, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::SyncScript, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::SyncXHR, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::Usermedia, |
+ FeaturePolicy::FeatureDefault::EnableForAll}, |
+ {blink::WebFeaturePolicyFeature::Vibrate, |
+ FeaturePolicy::FeatureDefault::EnableForSelf}, |
+ {blink::WebFeaturePolicyFeature::WebRTC, |
+ FeaturePolicy::FeatureDefault::EnableForAll}})); |
return default_feature_list; |
} |