Index: extensions/common/manifest_handlers/permissions_parser.h |
diff --git a/extensions/common/manifest_handlers/permissions_parser.h b/extensions/common/manifest_handlers/permissions_parser.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..81ffe0ec70ee37f1429bdc44072e7d86e6a87485 |
--- /dev/null |
+++ b/extensions/common/manifest_handlers/permissions_parser.h |
@@ -0,0 +1,63 @@ |
+// Copyright 2014 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_MANIFEST_HANDLERS_PERMISSIONS_PARSER_H_ |
+#define EXTENSIONS_COMMON_MANIFEST_HANDLERS_PERMISSIONS_PARSER_H_ |
+ |
+#include "base/memory/scoped_ptr.h" |
+#include "base/strings/string16.h" |
+#include "extensions/common/permissions/api_permission.h" |
+#include "extensions/common/permissions/permission_set.h" |
+ |
+namespace extensions { |
+ |
+class Extension; |
+class URLPatternSet; |
+ |
+// The class for parsing the kPermissions and kOptionalPermissions keys in the |
+// manifest. Because permissions are slightly different than other keys (they |
+// are used in many different handlers and need to be the first and last key |
+// touched), this is not an actual ManifestHandler (hence the difference in |
+// name). |
+class PermissionsParser { |
+ public: |
+ PermissionsParser(); |
+ ~PermissionsParser(); |
+ |
+ // Parse the manifest-specified permissions. |
+ bool Parse(Extension* extension, base::string16* error); |
+ |
+ // Finalize the permissions, setting the related manifest data on the |
+ // extension. |
+ void Finalize(Extension* extension); |
+ |
+ // Modify the manifest permissions. These methods should only be used |
+ // during initialization and will DCHECK() for safety. |
+ static void AddAPIPermission(Extension* extension, |
+ APIPermission::ID permission); |
+ static void AddAPIPermission(Extension* extension, APIPermission* permission); |
+ static bool HasAPIPermission(const Extension* extension, |
+ APIPermission::ID permission); |
+ static void SetScriptableHosts(Extension* extension, |
+ const URLPatternSet& scriptable_hosts); |
+ |
+ // Return the extension's manifest-specified permissions. In no cases should |
+ // these permissions be used to determine if an action is allowed. Instead, |
+ // use PermissionsData. |
+ static scoped_refptr<const PermissionSet> GetRequiredPermissions( |
+ const Extension* extension); |
+ static scoped_refptr<const PermissionSet> GetOptionalPermissions( |
+ const Extension* extension); |
+ |
+ private: |
+ struct InitialPermissions; |
+ |
+ // The initial permissions for the extension, which can still be modified. |
+ scoped_ptr<InitialPermissions> initial_required_permissions_; |
+ scoped_ptr<InitialPermissions> initial_optional_permissions_; |
+}; |
+ |
+} // namespace extensions |
+ |
+#endif // EXTENSIONS_COMMON_MANIFEST_HANDLERS_PERMISSIONS_PARSER_H_ |