| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef EXTENSIONS_COMMON_PERMISSIONS_API_PERMISSION_SET_H_ |
| #define EXTENSIONS_COMMON_PERMISSIONS_API_PERMISSION_SET_H_ |
| |
| |
| #include "extensions/common/permissions/api_permission.h" |
| #include "extensions/common/permissions/base_set_operators.h" |
| |
| namespace base { |
| class ListValue; |
| } // namespace base |
| |
| namespace extensions { |
| |
| class Extension; |
| class APIPermissionSet; |
| |
| template<> |
| struct BaseSetOperatorsTraits<APIPermissionSet> { |
| typedef APIPermission ElementType; |
| typedef APIPermission::ID ElementIDType; |
| }; |
| |
| class APIPermissionSet : public BaseSetOperators<APIPermissionSet> { |
| public: |
| enum ParseSource { |
| // Don't allow internal permissions to be parsed (e.g. entries in the |
| // "permissions" list in a manifest). |
| kDisallowInternalPermissions, |
| |
| // Allow internal permissions to be parsed (e.g. from the "api" field of a |
| // permissions list in the prefs). |
| kAllowInternalPermissions, |
| }; |
| |
| void insert(APIPermission::ID id); |
| |
| // Insert |permission| into the APIPermissionSet. The APIPermissionSet will |
| // take the ownership of |permission|, |
| void insert(APIPermission* permission); |
| |
| // Parses permissions from |permissions| and adds the parsed permissions to |
| // |api_permissions|. If |source| is kDisallowInternalPermissions, treat |
| // permissions with kFlagInternal as errors. If |unhandled_permissions| is |
| // not NULL, the names of all permissions that couldn't be parsed will be |
| // added to this vector. If |error| is NULL, parsing will continue with the |
| // next permission if invalid data is detected. If |error| is not NULL, it |
| // will be set to an error message and false is returned when an invalid |
| // permission is found. |
| static bool ParseFromJSON( |
| const base::ListValue* permissions, |
| ParseSource source, |
| APIPermissionSet* api_permissions, |
| base::string16* error, |
| std::vector<std::string>* unhandled_permissions); |
| |
| void AddImpliedPermissions(); |
| }; |
| |
| } // namespace extensions |
| |
| #endif // EXTENSIONS_COMMON_PERMISSIONS_API_PERMISSION_SET_H_ |