• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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