Chromium Code Reviews| Index: third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp |
| diff --git a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp |
| index cc07f33c685125a005bab321803a8f04089a884a..b49b8ea471b8fbf3c752d99c97a6abbde0dccbe0 100644 |
| --- a/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp |
| +++ b/third_party/WebKit/Source/platform/feature_policy/FeaturePolicy.cpp |
| @@ -159,6 +159,7 @@ const FeaturePolicy::FeatureList& FeaturePolicy::getDefaultFeatureList() { |
| // static |
| std::unique_ptr<FeaturePolicy> FeaturePolicy::createFromParentPolicy( |
| const FeaturePolicy* parent, |
| + const WebParsedFeaturePolicyHeader* framePolicy, |
| RefPtr<SecurityOrigin> currentOrigin, |
| FeaturePolicy::FeatureList& features) { |
| DCHECK(currentOrigin); |
| @@ -172,17 +173,41 @@ std::unique_ptr<FeaturePolicy> FeaturePolicy::createFromParentPolicy( |
| newPolicy->m_inheritedFeatures.set(feature, false); |
| } |
| } |
| + if (framePolicy) { |
| + newPolicy->addFramePolicy(parent, framePolicy); |
| + } |
| return newPolicy; |
| } |
| // static |
| std::unique_ptr<FeaturePolicy> FeaturePolicy::createFromParentPolicy( |
| const FeaturePolicy* parent, |
| + const WebParsedFeaturePolicyHeader* framePolicy, |
| RefPtr<SecurityOrigin> currentOrigin) { |
| - return createFromParentPolicy(parent, std::move(currentOrigin), |
| + return createFromParentPolicy(parent, framePolicy, std::move(currentOrigin), |
| getDefaultFeatureList()); |
| } |
| +void FeaturePolicy::addFramePolicy( |
| + const FeaturePolicy* parent, |
| + const WebParsedFeaturePolicyHeader* framePolicy) { |
|
raymes
2017/02/20 02:20:17
nit: it's a bit strange that we pass in a WebParse
iclelland
2017/02/21 19:51:05
Agreed. Will follow up as soon as the other change
|
| + DCHECK(parent); |
| + DCHECK(framePolicy); |
| + for (const WebParsedFeaturePolicyDeclaration& parsedDeclaration : |
| + *framePolicy) { |
| + const FeaturePolicy::Feature* feature = |
| + featureForName(parsedDeclaration.featureName, m_features); |
| + if (!feature) |
| + continue; |
| + if (Whitelist::from(parsedDeclaration)->contains(*m_origin) && |
| + parent->isFeatureEnabled(*feature)) { |
| + m_inheritedFeatures.set(feature, true); |
| + } else { |
| + m_inheritedFeatures.set(feature, false); |
| + } |
| + } |
| +} |
| + |
| // static |
| WebParsedFeaturePolicyHeader FeaturePolicy::parseFeaturePolicy( |
| const String& policy, |