Chromium Code Reviews| Index: extensions/common/permissions/api_permission_set.h |
| diff --git a/extensions/common/permissions/api_permission_set.h b/extensions/common/permissions/api_permission_set.h |
| index 9b6f26da35432ff80be0ff89bce6786d386117a8..29e7f654a1af2a6b7eb405cfef723b9c7afecfe7 100644 |
| --- a/extensions/common/permissions/api_permission_set.h |
| +++ b/extensions/common/permissions/api_permission_set.h |
| @@ -168,6 +168,180 @@ class APIPermissionSet { |
| APIPermissionMap map_; |
| }; |
| + |
| +// Represent the custom behavior of a top-level manifest entry contributing to |
| +// permission messages and storage. |
| +class ManifestPermission { |
|
Yoyo Zhou
2013/11/09 01:15:30
This has grown large enough to need its own file,
rpaquay
2013/11/11 18:37:35
Agreed, I have been working on this in a follow up
Yoyo Zhou
2013/11/12 02:39:29
I think this is important enough that it should be
rpaquay
2013/11/12 21:40:31
Done.
|
| + public: |
| + // The manifest key this permission applies to. |
| + virtual std::string name() const = 0; |
| + |
| + // Same as name(), needed for compatibility with APIPermission. |
| + virtual std::string id() const = 0; |
| + |
| + // Returns true if this permission has any PermissionMessages. |
| + virtual bool HasMessages() const = 0; |
| + |
| + // Returns the localized permission messages of this permission. |
| + virtual PermissionMessages GetMessages() const = 0; |
| + |
| + // Parses the ManifestPermission from |value|. Returns false if error happens. |
| + virtual bool FromValue(const base::Value* value) = 0; |
| + |
| + // Stores this into a new created |value|. |
| + virtual scoped_ptr<base::Value> ToValue() const = 0; |
| + |
| + // Clones this. |
| + virtual ManifestPermission* Clone() const = 0; |
| + |
| + // Returns a new API permission which equals this - |rhs|. |
| + virtual ManifestPermission* Diff(const ManifestPermission* rhs) |
| + const = 0; |
| + |
| + // Returns a new API permission which equals the union of this and |rhs|. |
| + virtual ManifestPermission* Union(const ManifestPermission* rhs) |
| + const = 0; |
| + |
| + // Returns a new API permission which equals the intersect of this and |rhs|. |
| + virtual ManifestPermission* Intersect(const ManifestPermission* rhs) |
| + const = 0; |
| + |
| + // Returns true if |rhs| is a subset of this. |
| + virtual bool Contains(const ManifestPermission* rhs) const = 0; |
| + |
| + // Returns true if |rhs| is equal to this. |
| + virtual bool Equal(const ManifestPermission* rhs) const = 0; |
| + |
| + // IPC functions |
| + // Writes this into the given IPC message |m|. |
| + virtual void Write(IPC::Message* m) const = 0; |
| + |
| + // Reads from the given IPC message |m|. |
| + virtual bool Read(const IPC::Message* m, PickleIterator* iter) = 0; |
| + |
| + // Logs this permission. |
| + virtual void Log(std::string* log) const = 0; |
| +}; |
| + |
| +typedef std::map<std::string, |
| + linked_ptr<ManifestPermission> > ManifestPermissionMap; |
| + |
| +class ManifestPermissionSet { |
|
Yoyo Zhou
2013/11/09 01:15:30
It looks like there is really a lot of duplicated
rpaquay
2013/11/11 18:37:35
Agreed. I have been working on this (along with un
rpaquay
2013/11/12 21:40:31
The latest patchset (#5) addresses this to a large
|
| + public: |
| + class const_iterator : |
| + public std::iterator<std::input_iterator_tag, const APIPermission*> { |
| + public: |
| + const_iterator(const ManifestPermissionMap::const_iterator& it); |
| + const_iterator(const const_iterator& ids_it); |
| + |
| + const_iterator& operator++() { |
| + ++it_; |
| + return *this; |
| + } |
| + |
| + const_iterator operator++(int) { |
| + const_iterator tmp(it_++); |
| + return tmp; |
| + } |
| + |
| + bool operator==(const const_iterator& rhs) const { |
| + return it_ == rhs.it_; |
| + } |
| + |
| + bool operator!=(const const_iterator& rhs) const { |
| + return it_ != rhs.it_; |
| + } |
| + |
| + const ManifestPermission* operator*() const { |
| + return it_->second.get(); |
| + } |
| + |
| + const ManifestPermission* operator->() const { |
| + return it_->second.get(); |
| + } |
| + |
| + private: |
| + ManifestPermissionMap::const_iterator it_; |
| + }; |
| + |
| + ManifestPermissionSet(); |
| + |
| + ManifestPermissionSet(const ManifestPermissionSet& set); |
| + |
| + ~ManifestPermissionSet(); |
| + |
| + const_iterator begin() const { |
| + return const_iterator(map().begin()); |
| + } |
| + |
| + const_iterator end() const { |
| + return map().end(); |
| + } |
| + |
| + const_iterator find(std::string id) const { |
| + return map().find(id); |
| + } |
| + |
| + const ManifestPermissionMap& map() const { |
| + return map_; |
| + } |
| + |
| + ManifestPermissionMap& map() { |
| + return map_; |
| + } |
| + |
| + void clear() { |
| + map_.clear(); |
| + } |
| + |
| + size_t count(std::string id) const { |
| + return map().count(id); |
| + } |
| + |
| + bool empty() const { |
| + return map().empty(); |
| + } |
| + |
| + size_t erase(std::string id) { |
| + return map().erase(id); |
| + } |
| + |
| + size_t size() const { |
| + return map().size(); |
| + } |
| + |
| + ManifestPermissionSet& operator=(const ManifestPermissionSet& rhs); |
| + |
| + bool operator==(const ManifestPermissionSet& rhs) const; |
| + |
| + bool operator!=(const ManifestPermissionSet& rhs) const { |
| + return !operator==(rhs); |
| + } |
| + |
| + // Take ownership and insert |permission| into the set. |
| + void insert(ManifestPermission* permission); |
| + |
| + bool Contains(const ManifestPermissionSet& rhs) const; |
| + |
| + static void Difference( |
| + const ManifestPermissionSet& set1, |
| + const ManifestPermissionSet& set2, |
| + ManifestPermissionSet* set3); |
| + |
| + static void Intersection( |
| + const ManifestPermissionSet& set1, |
| + const ManifestPermissionSet& set2, |
| + ManifestPermissionSet* set3); |
| + |
| + static void Union( |
| + const ManifestPermissionSet& set1, |
| + const ManifestPermissionSet& set2, |
| + ManifestPermissionSet* set3); |
| + |
| + private: |
| + ManifestPermissionMap map_; |
| +}; |
| + |
| } // namespace extensions |
| #endif // EXTENSIONS_COMMON_PERMISSIONS_API_PERMISSION_SET_H_ |