Home | History | Annotate | Download | only in manifest_handlers
      1 // Copyright 2014 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_MANIFEST_HANDLERS_PERMISSIONS_PARSER_H_
      6 #define EXTENSIONS_COMMON_MANIFEST_HANDLERS_PERMISSIONS_PARSER_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/strings/string16.h"
     10 #include "extensions/common/permissions/api_permission.h"
     11 #include "extensions/common/permissions/permission_set.h"
     12 
     13 namespace extensions {
     14 
     15 class Extension;
     16 class URLPatternSet;
     17 
     18 // The class for parsing the kPermissions and kOptionalPermissions keys in the
     19 // manifest. Because permissions are slightly different than other keys (they
     20 // are used in many different handlers and need to be the first and last key
     21 // touched), this is not an actual ManifestHandler (hence the difference in
     22 // name).
     23 class PermissionsParser {
     24  public:
     25   PermissionsParser();
     26   ~PermissionsParser();
     27 
     28   // Parse the manifest-specified permissions.
     29   bool Parse(Extension* extension, base::string16* error);
     30 
     31   // Finalize the permissions, setting the related manifest data on the
     32   // extension.
     33   void Finalize(Extension* extension);
     34 
     35   // Modify the manifest permissions. These methods should only be used
     36   // during initialization and will DCHECK() for safety.
     37   static void AddAPIPermission(Extension* extension,
     38                                APIPermission::ID permission);
     39   static void AddAPIPermission(Extension* extension, APIPermission* permission);
     40   static bool HasAPIPermission(const Extension* extension,
     41                                APIPermission::ID permission);
     42   static void SetScriptableHosts(Extension* extension,
     43                                  const URLPatternSet& scriptable_hosts);
     44 
     45   // Return the extension's manifest-specified permissions. In no cases should
     46   // these permissions be used to determine if an action is allowed. Instead,
     47   // use PermissionsData.
     48   static scoped_refptr<const PermissionSet> GetRequiredPermissions(
     49       const Extension* extension);
     50   static scoped_refptr<const PermissionSet> GetOptionalPermissions(
     51       const Extension* extension);
     52 
     53  private:
     54   struct InitialPermissions;
     55 
     56   // The initial permissions for the extension, which can still be modified.
     57   scoped_ptr<InitialPermissions> initial_required_permissions_;
     58   scoped_ptr<InitialPermissions> initial_optional_permissions_;
     59 };
     60 
     61 }  // namespace extensions
     62 
     63 #endif  // EXTENSIONS_COMMON_MANIFEST_HANDLERS_PERMISSIONS_PARSER_H_
     64