OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_H_ | 5 #ifndef EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_H_ |
6 #define EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_H_ | 6 #define EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 const GURL& url) const { | 69 const GURL& url) const { |
70 return IsAvailableToContext(extension, context, url, GetCurrentPlatform()); | 70 return IsAvailableToContext(extension, context, url, GetCurrentPlatform()); |
71 } | 71 } |
72 | 72 |
73 // extension::Feature: | 73 // extension::Feature: |
74 Availability IsAvailableToManifest(const std::string& extension_id, | 74 Availability IsAvailableToManifest(const std::string& extension_id, |
75 Manifest::Type type, | 75 Manifest::Type type, |
76 Manifest::Location location, | 76 Manifest::Location location, |
77 int manifest_version, | 77 int manifest_version, |
78 Platform platform) const override; | 78 Platform platform) const override; |
79 | |
80 Availability IsAvailableToContext(const Extension* extension, | 79 Availability IsAvailableToContext(const Extension* extension, |
81 Context context, | 80 Context context, |
82 const GURL& url, | 81 const GURL& url, |
83 Platform platform) const override; | 82 Platform platform) const override; |
84 | |
85 bool IsInternal() const override; | 83 bool IsInternal() const override; |
86 | |
87 bool IsIdInBlacklist(const std::string& extension_id) const override; | 84 bool IsIdInBlacklist(const std::string& extension_id) const override; |
88 bool IsIdInWhitelist(const std::string& extension_id) const override; | 85 bool IsIdInWhitelist(const std::string& extension_id) const override; |
89 | 86 |
90 static bool IsIdInArray(const std::string& extension_id, | 87 static bool IsIdInArray(const std::string& extension_id, |
91 const char* const array[], | 88 const char* const array[], |
92 size_t array_length); | 89 size_t array_length); |
93 | 90 |
94 protected: | |
95 // Similar to Manifest::Location, these are the classes of locations | 91 // Similar to Manifest::Location, these are the classes of locations |
96 // supported in feature files. Production code should never directly access | 92 // supported in feature files. These should only be used in this class and in |
97 // these. | 93 // generated files. |
98 enum Location { | 94 enum Location { |
99 UNSPECIFIED_LOCATION, | 95 UNSPECIFIED_LOCATION, |
100 COMPONENT_LOCATION, | 96 COMPONENT_LOCATION, |
101 EXTERNAL_COMPONENT_LOCATION, | 97 EXTERNAL_COMPONENT_LOCATION, |
102 POLICY_LOCATION, | 98 POLICY_LOCATION, |
103 }; | 99 }; |
104 | 100 |
105 // Accessors defined for testing. | 101 // Setters used by generated code to create the feature. |
106 std::vector<std::string>* blacklist() { return &blacklist_; } | 102 void set_blacklist(const std::vector<std::string>& blacklist) { |
107 const std::vector<std::string>* blacklist() const { return &blacklist_; } | 103 blacklist_ = blacklist; |
108 std::vector<std::string>* whitelist() { return &whitelist_; } | |
109 const std::vector<std::string>* whitelist() const { return &whitelist_; } | |
110 std::vector<Manifest::Type>* extension_types() { return &extension_types_; } | |
111 const std::vector<Manifest::Type>* extension_types() const { | |
112 return &extension_types_; | |
113 } | 104 } |
114 std::vector<Context>* contexts() { return &contexts_; } | 105 void set_channel(version_info::Channel channel) { |
115 const std::vector<Context>* contexts() const { return &contexts_; } | 106 channel_.reset(new version_info::Channel(channel)); |
116 std::vector<Platform>* platforms() { return &platforms_; } | |
117 Location location() const { return location_; } | |
118 void set_location(Location location) { location_ = location; } | |
119 int min_manifest_version() const { return min_manifest_version_; } | |
120 void set_min_manifest_version(int min_manifest_version) { | |
121 min_manifest_version_ = min_manifest_version; | |
122 } | |
123 int max_manifest_version() const { return max_manifest_version_; } | |
124 void set_max_manifest_version(int max_manifest_version) { | |
125 max_manifest_version_ = max_manifest_version; | |
126 } | |
127 const std::string& command_line_switch() const { | |
128 return command_line_switch_; | |
129 } | 107 } |
130 void set_command_line_switch(const std::string& command_line_switch) { | 108 void set_command_line_switch(const std::string& command_line_switch) { |
131 command_line_switch_ = command_line_switch; | 109 command_line_switch_ = command_line_switch; |
132 } | 110 } |
| 111 void set_component_extensions_auto_granted(bool granted) { |
| 112 component_extensions_auto_granted_ = granted; |
| 113 } |
| 114 void set_contexts(const std::vector<Context>& contexts) { |
| 115 contexts_ = contexts; |
| 116 } |
| 117 void set_dependencies(const std::vector<std::string>& dependencies) { |
| 118 dependencies_ = dependencies; |
| 119 } |
| 120 void set_extension_types(const std::vector<Manifest::Type> types) { |
| 121 extension_types_ = types; |
| 122 } |
| 123 void set_internal(bool is_internal) { is_internal_ = is_internal; } |
| 124 void set_location(Location location) { location_ = location; } |
| 125 void set_matches(const std::vector<std::string>& matches); |
| 126 void set_max_manifest_version(int max_manifest_version) { |
| 127 max_manifest_version_ = max_manifest_version; |
| 128 } |
| 129 void set_min_manifest_version(int min_manifest_version) { |
| 130 min_manifest_version_ = min_manifest_version; |
| 131 } |
| 132 void set_platforms(const std::vector<Platform>& platforms) { |
| 133 platforms_ = platforms; |
| 134 } |
| 135 void set_whitelist(const std::vector<std::string>& whitelist) { |
| 136 whitelist_ = whitelist; |
| 137 } |
| 138 |
| 139 protected: |
| 140 // Accessors used by subclasses in feature verification. |
| 141 const std::vector<std::string>& blacklist() const { return blacklist_; } |
| 142 const std::vector<std::string>& whitelist() const { return whitelist_; } |
| 143 const std::vector<Manifest::Type>& extension_types() const { |
| 144 return extension_types_; |
| 145 } |
| 146 const std::vector<Platform>& platforms() const { return platforms_; } |
| 147 const std::vector<Context>& contexts() const { return contexts_; } |
| 148 const std::vector<std::string>& dependencies() const { return dependencies_; } |
| 149 bool has_channel() const { return channel_.get() != nullptr; } |
| 150 version_info::Channel channel() const { return *channel_; } |
| 151 Location location() const { return location_; } |
| 152 int min_manifest_version() const { return min_manifest_version_; } |
| 153 int max_manifest_version() const { return max_manifest_version_; } |
| 154 const std::string& command_line_switch() const { |
| 155 return command_line_switch_; |
| 156 } |
| 157 bool component_extensions_auto_granted() const { |
| 158 return component_extensions_auto_granted_; |
| 159 } |
| 160 const URLPatternSet& matches() const { return matches_; } |
133 | 161 |
134 std::string GetAvailabilityMessage(AvailabilityResult result, | 162 std::string GetAvailabilityMessage(AvailabilityResult result, |
135 Manifest::Type type, | 163 Manifest::Type type, |
136 const GURL& url, | 164 const GURL& url, |
137 Context context, | 165 Context context, |
138 version_info::Channel channel) const; | 166 version_info::Channel channel) const; |
139 | 167 |
140 // Handy utilities which construct the correct availability message. | 168 // Handy utilities which construct the correct availability message. |
141 Availability CreateAvailability(AvailabilityResult result) const; | 169 Availability CreateAvailability(AvailabilityResult result) const; |
142 Availability CreateAvailability(AvailabilityResult result, | 170 Availability CreateAvailability(AvailabilityResult result, |
143 Manifest::Type type) const; | 171 Manifest::Type type) const; |
144 Availability CreateAvailability(AvailabilityResult result, | 172 Availability CreateAvailability(AvailabilityResult result, |
145 const GURL& url) const; | 173 const GURL& url) const; |
146 Availability CreateAvailability(AvailabilityResult result, | 174 Availability CreateAvailability(AvailabilityResult result, |
147 Context context) const; | 175 Context context) const; |
148 Availability CreateAvailability(AvailabilityResult result, | 176 Availability CreateAvailability(AvailabilityResult result, |
149 version_info::Channel channel) const; | 177 version_info::Channel channel) const; |
150 | 178 |
151 private: | 179 private: |
| 180 friend struct FeatureComparator; |
152 friend class SimpleFeatureTest; | 181 friend class SimpleFeatureTest; |
153 FRIEND_TEST_ALL_PREFIXES(BaseFeatureProviderTest, ManifestFeatureTypes); | 182 FRIEND_TEST_ALL_PREFIXES(BaseFeatureProviderTest, ManifestFeatureTypes); |
154 FRIEND_TEST_ALL_PREFIXES(BaseFeatureProviderTest, PermissionFeatureTypes); | 183 FRIEND_TEST_ALL_PREFIXES(BaseFeatureProviderTest, PermissionFeatureTypes); |
155 FRIEND_TEST_ALL_PREFIXES(ExtensionAPITest, DefaultConfigurationFeatures); | 184 FRIEND_TEST_ALL_PREFIXES(ExtensionAPITest, DefaultConfigurationFeatures); |
| 185 FRIEND_TEST_ALL_PREFIXES(FeaturesGenerationTest, FeaturesTest); |
156 FRIEND_TEST_ALL_PREFIXES(ManifestUnitTest, Extension); | 186 FRIEND_TEST_ALL_PREFIXES(ManifestUnitTest, Extension); |
157 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Blacklist); | 187 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Blacklist); |
158 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, CommandLineSwitch); | 188 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, CommandLineSwitch); |
159 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, ComplexFeatureAvailability); | 189 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, ComplexFeatureAvailability); |
160 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Context); | 190 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Context); |
161 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, FeatureValidation); | 191 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, FeatureValidation); |
162 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, HashedIdBlacklist); | 192 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, HashedIdBlacklist); |
163 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, HashedIdWhitelist); | 193 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, HashedIdWhitelist); |
164 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Inheritance); | 194 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Inheritance); |
165 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Location); | 195 FRIEND_TEST_ALL_PREFIXES(SimpleFeatureTest, Location); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 std::vector<std::string> whitelist_; | 227 std::vector<std::string> whitelist_; |
198 std::vector<std::string> dependencies_; | 228 std::vector<std::string> dependencies_; |
199 std::vector<Manifest::Type> extension_types_; | 229 std::vector<Manifest::Type> extension_types_; |
200 std::vector<Context> contexts_; | 230 std::vector<Context> contexts_; |
201 std::vector<Platform> platforms_; | 231 std::vector<Platform> platforms_; |
202 URLPatternSet matches_; | 232 URLPatternSet matches_; |
203 Location location_; | 233 Location location_; |
204 int min_manifest_version_; | 234 int min_manifest_version_; |
205 int max_manifest_version_; | 235 int max_manifest_version_; |
206 bool component_extensions_auto_granted_; | 236 bool component_extensions_auto_granted_; |
| 237 bool is_internal_; |
207 std::string command_line_switch_; | 238 std::string command_line_switch_; |
208 std::unique_ptr<version_info::Channel> channel_; | 239 std::unique_ptr<version_info::Channel> channel_; |
209 bool internal_; | |
210 | 240 |
211 DISALLOW_COPY_AND_ASSIGN(SimpleFeature); | 241 DISALLOW_COPY_AND_ASSIGN(SimpleFeature); |
212 }; | 242 }; |
213 | 243 |
214 } // namespace extensions | 244 } // namespace extensions |
215 | 245 |
216 #endif // EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_H_ | 246 #endif // EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_H_ |
OLD | NEW |