Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / common / extensions / features / simple_feature.h
blobb3716b7968ac63f6eb8d03c2c14be667d084b565
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_COMMON_EXTENSIONS_FEATURES_SIMPLE_FEATURE_H_
6 #define CHROME_COMMON_EXTENSIONS_FEATURES_SIMPLE_FEATURE_H_
8 #include <set>
9 #include <string>
11 #include "base/gtest_prod_util.h"
12 #include "base/values.h"
13 #include "chrome/common/chrome_version_info.h"
14 #include "extensions/common/extension.h"
15 #include "extensions/common/features/feature.h"
16 #include "extensions/common/manifest.h"
18 namespace extensions {
20 class ComplexFeature;
22 class SimpleFeature : public Feature {
23 public:
24 SimpleFeature();
25 SimpleFeature(const SimpleFeature& other);
26 virtual ~SimpleFeature();
28 std::set<std::string>* whitelist() { return &whitelist_; }
29 std::set<Manifest::Type>* extension_types() { return &extension_types_; }
31 // Parses the JSON representation of a feature into the fields of this object.
32 // Unspecified values in the JSON are not modified in the object. This allows
33 // us to implement inheritance by parsing one value after another. Returns
34 // the error found, or an empty string on success.
35 virtual std::string Parse(const base::DictionaryValue* value);
37 // Returns true if the feature contains the same values as another.
38 bool Equals(const SimpleFeature& other) const;
40 Location location() const { return location_; }
41 void set_location(Location location) { location_ = location; }
43 std::set<Platform>* platforms() { return &platforms_; }
45 int min_manifest_version() const { return min_manifest_version_; }
46 void set_min_manifest_version(int min_manifest_version) {
47 min_manifest_version_ = min_manifest_version;
50 int max_manifest_version() const { return max_manifest_version_; }
51 void set_max_manifest_version(int max_manifest_version) {
52 max_manifest_version_ = max_manifest_version;
55 Availability IsAvailableToContext(const Extension* extension,
56 Context context) const {
57 return IsAvailableToContext(extension, context, GURL());
59 Availability IsAvailableToContext(const Extension* extension,
60 Context context,
61 Platform platform) const {
62 return IsAvailableToContext(extension, context, GURL(), platform);
64 Availability IsAvailableToContext(const Extension* extension,
65 Context context,
66 const GURL& url) const {
67 return IsAvailableToContext(extension, context, url, GetCurrentPlatform());
70 // extension::Feature:
71 virtual Availability IsAvailableToManifest(const std::string& extension_id,
72 Manifest::Type type,
73 Location location,
74 int manifest_version,
75 Platform platform) const OVERRIDE;
77 virtual Availability IsAvailableToContext(const Extension* extension,
78 Context context,
79 const GURL& url,
80 Platform platform) const OVERRIDE;
82 virtual std::string GetAvailabilityMessage(AvailabilityResult result,
83 Manifest::Type type,
84 const GURL& url,
85 Context context) const OVERRIDE;
87 virtual std::set<Context>* GetContexts() OVERRIDE;
89 virtual bool IsInternal() const OVERRIDE;
91 virtual bool IsIdInWhitelist(const std::string& extension_id) const OVERRIDE;
92 static bool IsIdInWhitelist(const std::string& extension_id,
93 const std::set<std::string>& whitelist);
95 protected:
96 Availability CreateAvailability(AvailabilityResult result) const;
97 Availability CreateAvailability(AvailabilityResult result,
98 Manifest::Type type) const;
99 Availability CreateAvailability(AvailabilityResult result,
100 const GURL& url) const;
101 Availability CreateAvailability(AvailabilityResult result,
102 Context context) const;
104 private:
105 // For clarity and consistency, we handle the default value of each of these
106 // members the same way: it matches everything. It is up to the higher level
107 // code that reads Features out of static data to validate that data and set
108 // sensible defaults.
109 std::set<std::string> whitelist_;
110 std::set<Manifest::Type> extension_types_;
111 std::set<Context> contexts_;
112 URLPatternSet matches_;
113 Location location_; // we only care about component/not-component now
114 std::set<Platform> platforms_;
115 int min_manifest_version_;
116 int max_manifest_version_;
117 chrome::VersionInfo::Channel channel_;
118 bool has_parent_;
119 bool channel_has_been_set_;
121 FRIEND_TEST_ALL_PREFIXES(ExtensionSimpleFeatureTest, Context);
124 } // namespace extensions
126 #endif // CHROME_COMMON_EXTENSIONS_FEATURES_SIMPLE_FEATURE_H_