Home | History | Annotate | Download | only in permissions
      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       base::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