OLD | NEW |
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 "platform/feature_policy/FeaturePolicy.h" | 5 #include "platform/feature_policy/FeaturePolicy.h" |
6 | 6 |
7 #include "platform/RuntimeEnabledFeatures.h" | 7 #include "platform/RuntimeEnabledFeatures.h" |
8 #include "platform/json/JSONValues.h" | 8 #include "platform/json/JSONValues.h" |
9 #include "platform/network/HTTPParsers.h" | 9 #include "platform/network/HTTPParsers.h" |
10 #include "platform/weborigin/SecurityOrigin.h" | 10 #include "platform/weborigin/SecurityOrigin.h" |
11 #include "platform/wtf/PtrUtil.h" | 11 #include "platform/wtf/PtrUtil.h" |
12 | 12 |
13 namespace blink { | 13 namespace blink { |
14 | 14 |
15 namespace { | |
16 | |
17 void AddAllowFeatureToList( | |
18 WebFeaturePolicyFeature feature, | |
19 Vector<WebParsedFeaturePolicyDeclaration>& whitelists) { | |
20 WebParsedFeaturePolicyDeclaration whitelist; | |
21 whitelist.feature = feature; | |
22 whitelist.matches_all_origins = true; | |
23 whitelists.push_back(whitelist); | |
24 } | |
25 | |
26 } // namespace | |
27 | |
28 WebParsedFeaturePolicy ParseFeaturePolicy(const String& policy, | 15 WebParsedFeaturePolicy ParseFeaturePolicy(const String& policy, |
29 RefPtr<SecurityOrigin> origin, | 16 RefPtr<SecurityOrigin> origin, |
30 Vector<String>* messages) { | 17 Vector<String>* messages) { |
31 return ParseFeaturePolicy(policy, origin, messages, | 18 return ParseFeaturePolicy(policy, origin, messages, |
32 GetDefaultFeatureNameMap()); | 19 GetDefaultFeatureNameMap()); |
33 } | 20 } |
34 | 21 |
35 WebParsedFeaturePolicy ParseFeaturePolicy(const String& policy, | 22 WebParsedFeaturePolicy ParseFeaturePolicy(const String& policy, |
36 RefPtr<SecurityOrigin> origin, | 23 RefPtr<SecurityOrigin> origin, |
37 Vector<String>* messages, | 24 Vector<String>* messages, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 messages->push_back("Whitelist is not an array of strings."); | 77 messages->push_back("Whitelist is not an array of strings."); |
91 } | 78 } |
92 } | 79 } |
93 whitelist.origins = origins; | 80 whitelist.origins = origins; |
94 whitelists.push_back(whitelist); | 81 whitelists.push_back(whitelist); |
95 } | 82 } |
96 } | 83 } |
97 return whitelists; | 84 return whitelists; |
98 } | 85 } |
99 | 86 |
100 WebParsedFeaturePolicy GetContainerPolicyFromAllowedFeatures( | |
101 const WebVector<WebFeaturePolicyFeature>& features, | |
102 bool allowfullscreen, | |
103 bool allowpayment, | |
104 RefPtr<SecurityOrigin> origin) { | |
105 Vector<WebParsedFeaturePolicyDeclaration> whitelists; | |
106 bool override_payment = false; | |
107 bool override_fullscreen = false; | |
108 for (const WebFeaturePolicyFeature feature : features) { | |
109 // Container policy should override "allowfullscreen" and | |
110 // "allowpaymentrequest" policies. | |
111 if (feature == WebFeaturePolicyFeature::kPayment) | |
112 override_payment = true; | |
113 if (feature == WebFeaturePolicyFeature::kFullscreen) | |
114 override_fullscreen = true; | |
115 | |
116 WebParsedFeaturePolicyDeclaration whitelist; | |
117 whitelist.feature = feature; | |
118 whitelist.origins = Vector<WebSecurityOrigin>(1UL, {origin}); | |
119 whitelists.push_back(whitelist); | |
120 } | |
121 // If allowfullscreen attribute is present and no fullscreen policy is set, | |
122 // enable the feature for all origins; similarly for allowpaymentrequest. | |
123 if (allowpayment && !override_payment) | |
124 AddAllowFeatureToList(WebFeaturePolicyFeature::kPayment, whitelists); | |
125 if (allowfullscreen && !override_fullscreen) | |
126 AddAllowFeatureToList(WebFeaturePolicyFeature::kFullscreen, whitelists); | |
127 | |
128 return whitelists; | |
129 } | |
130 | |
131 bool IsSupportedInFeaturePolicy(WebFeaturePolicyFeature feature) { | 87 bool IsSupportedInFeaturePolicy(WebFeaturePolicyFeature feature) { |
132 switch (feature) { | 88 switch (feature) { |
133 // TODO(lunalu): Re-enabled fullscreen in feature policy once tests have | 89 // TODO(lunalu): Re-enabled fullscreen in feature policy once tests have |
134 // been updated. | 90 // been updated. |
135 // crbug.com/666761 | 91 // crbug.com/666761 |
136 case WebFeaturePolicyFeature::kFullscreen: | 92 case WebFeaturePolicyFeature::kFullscreen: |
137 return false; | 93 return false; |
138 case WebFeaturePolicyFeature::kPayment: | 94 case WebFeaturePolicyFeature::kPayment: |
139 return true; | 95 return true; |
140 case WebFeaturePolicyFeature::kVibrate: | 96 case WebFeaturePolicyFeature::kVibrate: |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 WebFeaturePolicyFeature::kSyncScript); | 134 WebFeaturePolicyFeature::kSyncScript); |
179 default_feature_name_map.Set("sync-xhr", | 135 default_feature_name_map.Set("sync-xhr", |
180 WebFeaturePolicyFeature::kSyncXHR); | 136 WebFeaturePolicyFeature::kSyncXHR); |
181 default_feature_name_map.Set("webrtc", WebFeaturePolicyFeature::kWebRTC); | 137 default_feature_name_map.Set("webrtc", WebFeaturePolicyFeature::kWebRTC); |
182 } | 138 } |
183 } | 139 } |
184 return default_feature_name_map; | 140 return default_feature_name_map; |
185 } | 141 } |
186 | 142 |
187 } // namespace blink | 143 } // namespace blink |
OLD | NEW |