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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/feature_policy/feature_policy.h" 5 #include "content/common/feature_policy/feature_policy.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 9
10 namespace content { 10 namespace content {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 for (const auto& targetOrigin : origins_) { 100 for (const auto& targetOrigin : origins_) {
101 if (targetOrigin.IsSameOriginWith(origin)) 101 if (targetOrigin.IsSameOriginWith(origin))
102 return true; 102 return true;
103 } 103 }
104 return false; 104 return false;
105 } 105 }
106 106
107 // static 107 // static
108 std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy( 108 std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy(
109 const FeaturePolicy* parent_policy, 109 const FeaturePolicy* parent_policy,
110 const FeaturePolicyHeader* frame_policy,
110 url::Origin origin) { 111 url::Origin origin) {
111 return CreateFromParentPolicy(parent_policy, origin, getDefaultFeatureList()); 112 return CreateFromParentPolicy(parent_policy, frame_policy, origin,
113 getDefaultFeatureList());
112 } 114 }
113 115
114 bool FeaturePolicy::IsFeatureEnabledForOrigin( 116 bool FeaturePolicy::IsFeatureEnabledForOrigin(
115 blink::WebFeaturePolicyFeature feature, 117 blink::WebFeaturePolicyFeature feature,
116 url::Origin origin) const { 118 url::Origin origin) const {
117 DCHECK(feature_list_.count(feature)); 119 DCHECK(feature_list_.count(feature));
118 const FeaturePolicy::Feature* feature_definition = feature_list_.at(feature); 120 const FeaturePolicy::Feature* feature_definition = feature_list_.at(feature);
119 DCHECK(inherited_policies_.count(feature)); 121 DCHECK(inherited_policies_.count(feature));
120 if (!inherited_policies_.at(feature)) { 122 if (!inherited_policies_.at(feature)) {
121 return false; 123 return false;
(...skipping 30 matching lines...) Expand all
152 } 154 }
153 155
154 FeaturePolicy::FeaturePolicy(url::Origin origin, 156 FeaturePolicy::FeaturePolicy(url::Origin origin,
155 const FeatureList& feature_list) 157 const FeatureList& feature_list)
156 : origin_(origin), feature_list_(feature_list) {} 158 : origin_(origin), feature_list_(feature_list) {}
157 FeaturePolicy::FeaturePolicy(url::Origin origin) 159 FeaturePolicy::FeaturePolicy(url::Origin origin)
158 : origin_(origin), feature_list_(getDefaultFeatureList()) {} 160 : origin_(origin), feature_list_(getDefaultFeatureList()) {}
159 FeaturePolicy::~FeaturePolicy() {} 161 FeaturePolicy::~FeaturePolicy() {}
160 162
161 // static 163 // static
164 /*
165 * To Add to this: another FeaturePolicyHeader for irame attributes.
166 * In that case, we change the inherited polies, but only if the parent allows
167 * it for itself (or we check the parent inherited policy; see which is better)
168 */
162 std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy( 169 std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy(
163 const FeaturePolicy* parent_policy, 170 const FeaturePolicy* parent_policy,
171 const FeaturePolicyHeader* frame_policy,
164 url::Origin origin, 172 url::Origin origin,
165 const FeaturePolicy::FeatureList& features) { 173 const FeaturePolicy::FeatureList& features) {
166 std::unique_ptr<FeaturePolicy> newPolicy = 174 std::unique_ptr<FeaturePolicy> newPolicy =
167 base::WrapUnique(new FeaturePolicy(origin, features)); 175 base::WrapUnique(new FeaturePolicy(origin, features));
168 for (const auto& feature : features) { 176 for (const auto& feature : features) {
169 if (!parent_policy || 177 if (!parent_policy ||
170 parent_policy->IsFeatureEnabledForOrigin(feature.first, origin)) { 178 parent_policy->IsFeatureEnabledForOrigin(feature.first, origin)) {
171 newPolicy->inherited_policies_[feature.first] = true; 179 newPolicy->inherited_policies_[feature.first] = true;
172 } else { 180 } else {
173 newPolicy->inherited_policies_[feature.first] = false; 181 newPolicy->inherited_policies_[feature.first] = false;
174 } 182 }
183 if (frame_policy) {
184 newPolicy->AddFramePolicy(parent_policy, frame_policy);
185 }
175 } 186 }
176 return newPolicy; 187 return newPolicy;
177 } 188 }
178 189
190 void FeaturePolicy::AddFramePolicy(const FeaturePolicy* parent_policy,
191 const FeaturePolicyHeader* frame_policy) {
192 DCHECK(parent_policy);
193 DCHECK(frame_policy);
194 for (const FeaturePolicyParsedDeclaration& parsed_declaration :
195 *frame_policy) {
196 blink::WebFeaturePolicyFeature feature =
197 FeatureForName(parsed_declaration.feature_name, feature_list_);
198 if (feature == blink::WebFeaturePolicyFeature::NotFound)
199 continue;
200 if (WhitelistFromDeclaration(parsed_declaration)->Contains(origin_) &&
201 // TODO: Check to see if this should look at
202 // parent_policy->inherited_policies_ instead.
203 parent_policy->IsFeatureEnabled(feature)) {
204 inherited_policies_[feature] = true;
205 } else {
206 inherited_policies_[feature] = false;
207 }
208 }
209 }
210
179 // static 211 // static
180 const FeaturePolicy::FeatureList& FeaturePolicy::getDefaultFeatureList() { 212 const FeaturePolicy::FeatureList& FeaturePolicy::getDefaultFeatureList() {
181 // TODO: See if this should use lazy_instance instead 213 // TODO: See if this should use lazy_instance instead
182 CR_DEFINE_STATIC_LOCAL( 214 CR_DEFINE_STATIC_LOCAL(
183 FeatureList, defaultFeatureList, 215 FeatureList, defaultFeatureList,
184 ({{blink::WebFeaturePolicyFeature::DocumentCookie, &kDocumentCookie}, 216 ({{blink::WebFeaturePolicyFeature::DocumentCookie, &kDocumentCookie},
185 {blink::WebFeaturePolicyFeature::DocumentDomain, &kDocumentDomain}, 217 {blink::WebFeaturePolicyFeature::DocumentDomain, &kDocumentDomain},
186 {blink::WebFeaturePolicyFeature::DocumentWrite, &kDocumentWrite}, 218 {blink::WebFeaturePolicyFeature::DocumentWrite, &kDocumentWrite},
187 {blink::WebFeaturePolicyFeature::Fullscreen, &kFullscreenFeature}, 219 {blink::WebFeaturePolicyFeature::Fullscreen, &kFullscreenFeature},
188 {blink::WebFeaturePolicyFeature::Geolocation, &kGeolocationFeature}, 220 {blink::WebFeaturePolicyFeature::Geolocation, &kGeolocationFeature},
189 {blink::WebFeaturePolicyFeature::MidiFeature, &kMidiFeature}, 221 {blink::WebFeaturePolicyFeature::MidiFeature, &kMidiFeature},
190 {blink::WebFeaturePolicyFeature::Notifications, &kNotificationsFeature}, 222 {blink::WebFeaturePolicyFeature::Notifications, &kNotificationsFeature},
191 {blink::WebFeaturePolicyFeature::Payment, &kPaymentFeature}, 223 {blink::WebFeaturePolicyFeature::Payment, &kPaymentFeature},
192 {blink::WebFeaturePolicyFeature::Push, &kPushFeature}, 224 {blink::WebFeaturePolicyFeature::Push, &kPushFeature},
193 {blink::WebFeaturePolicyFeature::SyncScript, &kSyncScript}, 225 {blink::WebFeaturePolicyFeature::SyncScript, &kSyncScript},
194 {blink::WebFeaturePolicyFeature::SyncXHR, &kSyncXHR}, 226 {blink::WebFeaturePolicyFeature::SyncXHR, &kSyncXHR},
195 {blink::WebFeaturePolicyFeature::Usermedia, &kUsermedia}, 227 {blink::WebFeaturePolicyFeature::Usermedia, &kUsermedia},
196 {blink::WebFeaturePolicyFeature::Vibrate, &kVibrateFeature}, 228 {blink::WebFeaturePolicyFeature::Vibrate, &kVibrateFeature},
197 {blink::WebFeaturePolicyFeature::WebRTC, &kWebRTC}})); 229 {blink::WebFeaturePolicyFeature::WebRTC, &kWebRTC}}));
198 return defaultFeatureList; 230 return defaultFeatureList;
199 } 231 }
200 232
201 } // namespace content 233 } // namespace content
OLDNEW
« 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