1 // Copyright 2013 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. 4 5 #ifndef EXTENSIONS_COMMON_PERMISSIONS_API_PERMISSION_SET_H_ 6 #define EXTENSIONS_COMMON_PERMISSIONS_API_PERMISSION_SET_H_ 7 8 9 #include "extensions/common/permissions/api_permission.h" 10 #include "extensions/common/permissions/base_set_operators.h" 11 12 namespace base { 13 class ListValue; 14 } // namespace base 15 16 namespace extensions { 17 18 class Extension; 19 class APIPermissionSet; 20 21 template<> 22 struct BaseSetOperatorsTraits<APIPermissionSet> { 23 typedef APIPermission ElementType; 24 typedef APIPermission::ID ElementIDType; 25 }; 26 27 class APIPermissionSet : public BaseSetOperators<APIPermissionSet> { 28 public: 29 enum ParseSource { 30 // Don't allow internal permissions to be parsed (e.g. entries in the 31 // "permissions" list in a manifest). 32 kDisallowInternalPermissions, 33 34 // Allow internal permissions to be parsed (e.g. from the "api" field of a 35 // permissions list in the prefs). 36 kAllowInternalPermissions, 37 }; 38 39 void insert(APIPermission::ID id); 40 41 // Insert |permission| into the APIPermissionSet. The APIPermissionSet will 42 // take the ownership of |permission|, 43 void insert(APIPermission* permission); 44 45 // Parses permissions from |permissions| and adds the parsed permissions to 46 // |api_permissions|. If |source| is kDisallowInternalPermissions, treat 47 // permissions with kFlagInternal as errors. If |unhandled_permissions| is 48 // not NULL, the names of all permissions that couldn't be parsed will be 49 // added to this vector. If |error| is NULL, parsing will continue with the 50 // next permission if invalid data is detected. If |error| is not NULL, it 51 // will be set to an error message and false is returned when an invalid 52 // permission is found. 53 static bool ParseFromJSON( 54 const base::ListValue* permissions, 55 ParseSource source, 56 APIPermissionSet* api_permissions, 57 string16* error, 58 std::vector<std::string>* unhandled_permissions); 59 60 void AddImpliedPermissions(); 61 }; 62 63 } // namespace extensions 64 65 #endif // EXTENSIONS_COMMON_PERMISSIONS_API_PERMISSION_SET_H_ 66