Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 | 10 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 90 | 90 |
| 91 void FeaturePolicy::Whitelist::Add(const url::Origin& origin) { | 91 void FeaturePolicy::Whitelist::Add(const url::Origin& origin) { |
| 92 origins_.push_back(origin); | 92 origins_.push_back(origin); |
| 93 } | 93 } |
| 94 | 94 |
| 95 void FeaturePolicy::Whitelist::AddAll() { | 95 void FeaturePolicy::Whitelist::AddAll() { |
| 96 matches_all_origins_ = true; | 96 matches_all_origins_ = true; |
| 97 } | 97 } |
| 98 | 98 |
| 99 bool FeaturePolicy::Whitelist::Contains(const url::Origin& origin) const { | 99 bool FeaturePolicy::Whitelist::Contains(const url::Origin& origin) const { |
| 100 // This does not handle the case where origin is an opaque origin, which is | |
| 101 // also supposed to exist in the whitelist. (The identical opaque origins | |
| 102 // should match in that case) | |
| 103 // TODO(iclelland): Fix that, possibly by having another flag for | |
| 104 // 'matches_self', which will explicitly match the policy's origin. | |
| 105 // https://crbug.com/690520 | |
| 100 if (matches_all_origins_) | 106 if (matches_all_origins_) |
| 101 return true; | 107 return true; |
| 102 for (const auto& targetOrigin : origins_) { | 108 for (const auto& targetOrigin : origins_) { |
| 103 if (targetOrigin.IsSameOriginWith(origin)) | 109 if (targetOrigin.IsSameOriginWith(origin)) |
| 104 return true; | 110 return true; |
| 105 } | 111 } |
| 106 return false; | 112 return false; |
| 107 } | 113 } |
| 108 | 114 |
| 109 // static | 115 // static |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 123 return false; | 129 return false; |
| 124 auto whitelist = whitelists_.find(feature); | 130 auto whitelist = whitelists_.find(feature); |
| 125 if (whitelist != whitelists_.end()) | 131 if (whitelist != whitelists_.end()) |
| 126 return whitelist->second->Contains(origin); | 132 return whitelist->second->Contains(origin); |
| 127 if (feature_definition->default_policy == | 133 if (feature_definition->default_policy == |
| 128 FeaturePolicy::FeatureDefault::EnableForAll) { | 134 FeaturePolicy::FeatureDefault::EnableForAll) { |
| 129 return true; | 135 return true; |
| 130 } | 136 } |
| 131 if (feature_definition->default_policy == | 137 if (feature_definition->default_policy == |
| 132 FeaturePolicy::FeatureDefault::EnableForSelf) { | 138 FeaturePolicy::FeatureDefault::EnableForSelf) { |
| 133 return origin_.IsSameOriginWith(origin); | 139 // TODO(iclelland): Remove the pointer equality check once it is possible to |
| 140 // compare opaque origins successfully against themselves. | |
| 141 // https://crbug.com/690520 | |
|
raymes
2017/02/13 04:45:22
I put a question on the bug about this. I'm wonder
iclelland
2017/02/23 20:04:12
I don't know if we can -- they are going to need *
| |
| 142 return (&origin_ == &origin) || origin_.IsSameOriginWith(origin); | |
| 134 } | 143 } |
| 135 return false; | 144 return false; |
| 136 } | 145 } |
| 137 | 146 |
| 138 bool FeaturePolicy::IsFeatureEnabled( | 147 bool FeaturePolicy::IsFeatureEnabled( |
| 139 blink::WebFeaturePolicyFeature feature) const { | 148 blink::WebFeaturePolicyFeature feature) const { |
| 140 return IsFeatureEnabledForOrigin(feature, origin_); | 149 return IsFeatureEnabledForOrigin(feature, origin_); |
| 141 } | 150 } |
| 142 | 151 |
| 143 void FeaturePolicy::SetHeaderPolicy( | 152 void FeaturePolicy::SetHeaderPolicy( |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 195 {blink::WebFeaturePolicyFeature::Push, &kPushFeature}, | 204 {blink::WebFeaturePolicyFeature::Push, &kPushFeature}, |
| 196 {blink::WebFeaturePolicyFeature::SyncScript, &kSyncScript}, | 205 {blink::WebFeaturePolicyFeature::SyncScript, &kSyncScript}, |
| 197 {blink::WebFeaturePolicyFeature::SyncXHR, &kSyncXHR}, | 206 {blink::WebFeaturePolicyFeature::SyncXHR, &kSyncXHR}, |
| 198 {blink::WebFeaturePolicyFeature::Usermedia, &kUsermedia}, | 207 {blink::WebFeaturePolicyFeature::Usermedia, &kUsermedia}, |
| 199 {blink::WebFeaturePolicyFeature::Vibrate, &kVibrateFeature}, | 208 {blink::WebFeaturePolicyFeature::Vibrate, &kVibrateFeature}, |
| 200 {blink::WebFeaturePolicyFeature::WebRTC, &kWebRTC}})); | 209 {blink::WebFeaturePolicyFeature::WebRTC, &kWebRTC}})); |
| 201 return default_feature_list; | 210 return default_feature_list; |
| 202 } | 211 } |
| 203 | 212 |
| 204 } // namespace content | 213 } // namespace content |
| OLD | NEW |