Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1202)

Unified Diff: content/common/feature_policy/feature_policy.cc

Issue 2653623004: [WIP NOT FOR COMMIT] Feature policy: Add basic algorithm for supporting frame policies, start plumb… (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 b51bee50b30949fab7dc872c4fdb26d5df6b11ca..7d529bdc206d850ddf1362b911d898ba7a82c07c 100644
--- a/content/common/feature_policy/feature_policy.cc
+++ b/content/common/feature_policy/feature_policy.cc
@@ -107,8 +107,10 @@ bool FeaturePolicy::Whitelist::Contains(const url::Origin& origin) const {
// static
std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy(
const FeaturePolicy* parent_policy,
+ const FeaturePolicyHeader* frame_policy,
url::Origin origin) {
- return CreateFromParentPolicy(parent_policy, origin, getDefaultFeatureList());
+ return CreateFromParentPolicy(parent_policy, frame_policy, origin,
+ getDefaultFeatureList());
}
bool FeaturePolicy::IsFeatureEnabledForOrigin(
@@ -159,8 +161,14 @@ FeaturePolicy::FeaturePolicy(url::Origin origin)
FeaturePolicy::~FeaturePolicy() {}
// static
+/*
+ * To Add to this: another FeaturePolicyHeader for irame attributes.
+ * In that case, we change the inherited polies, but only if the parent allows
+ * it for itself (or we check the parent inherited policy; see which is better)
+ */
std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy(
const FeaturePolicy* parent_policy,
+ const FeaturePolicyHeader* frame_policy,
url::Origin origin,
const FeaturePolicy::FeatureList& features) {
std::unique_ptr<FeaturePolicy> newPolicy =
@@ -172,10 +180,34 @@ std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy(
} else {
newPolicy->inherited_policies_[feature.first] = false;
}
+ if (frame_policy) {
+ newPolicy->AddFramePolicy(parent_policy, frame_policy);
+ }
}
return newPolicy;
}
+void FeaturePolicy::AddFramePolicy(const FeaturePolicy* parent_policy,
+ const FeaturePolicyHeader* frame_policy) {
+ DCHECK(parent_policy);
+ DCHECK(frame_policy);
+ for (const FeaturePolicyParsedDeclaration& parsed_declaration :
+ *frame_policy) {
+ blink::WebFeaturePolicyFeature feature =
+ FeatureForName(parsed_declaration.feature_name, feature_list_);
+ if (feature == blink::WebFeaturePolicyFeature::NotFound)
+ continue;
+ if (WhitelistFromDeclaration(parsed_declaration)->Contains(origin_) &&
+ // TODO: Check to see if this should look at
+ // parent_policy->inherited_policies_ instead.
+ parent_policy->IsFeatureEnabled(feature)) {
+ inherited_policies_[feature] = true;
+ } else {
+ inherited_policies_[feature] = false;
+ }
+ }
+}
+
// static
const FeaturePolicy::FeatureList& FeaturePolicy::getDefaultFeatureList() {
// TODO: See if this should use lazy_instance instead
« no previous file with comments | « content/common/feature_policy/feature_policy.h ('k') | content/common/feature_policy/feature_policy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698