1 // Copyright (c) 2012 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.
5 #include "chrome/common/extensions/permissions/permissions_info.h"
7 #include "base/logging.h"
8 #include "base/string_util.h"
10 namespace extensions
{
13 PermissionsInfo
* PermissionsInfo::GetInstance() {
14 return Singleton
<PermissionsInfo
>::get();
17 const APIPermissionInfo
* PermissionsInfo::GetByID(
18 APIPermission::ID id
) const {
19 IDMap::const_iterator i
= id_map_
.find(id
);
20 return (i
== id_map_
.end()) ? NULL
: i
->second
;
23 const APIPermissionInfo
* PermissionsInfo::GetByName(
24 const std::string
& name
) const {
25 NameMap::const_iterator i
= name_map_
.find(name
);
26 return (i
== name_map_
.end()) ? NULL
: i
->second
;
29 APIPermissionSet
PermissionsInfo::GetAll() const {
30 APIPermissionSet permissions
;
31 for (IDMap::const_iterator i
= id_map_
.begin(); i
!= id_map_
.end(); ++i
)
32 permissions
.insert(i
->second
->id());
36 APIPermissionSet
PermissionsInfo::GetAllByName(
37 const std::set
<std::string
>& permission_names
) const {
38 APIPermissionSet permissions
;
39 for (std::set
<std::string
>::const_iterator i
= permission_names
.begin();
40 i
!= permission_names
.end(); ++i
) {
41 const APIPermissionInfo
* permission_info
= GetByName(*i
);
43 permissions
.insert(permission_info
->id());
48 bool PermissionsInfo::HasChildPermissions(const std::string
& name
) const {
49 NameMap::const_iterator i
= name_map_
.lower_bound(name
+ '.');
50 if (i
== name_map_
.end()) return false;
51 return StartsWithASCII(i
->first
, name
+ '.', true);
54 PermissionsInfo::~PermissionsInfo() {
55 for (IDMap::iterator i
= id_map_
.begin(); i
!= id_map_
.end(); ++i
)
59 PermissionsInfo::PermissionsInfo()
60 : hosted_app_permission_count_(0),
61 permission_count_(0) {
62 APIPermissionInfo::RegisterAllPermissions(this);
65 void PermissionsInfo::RegisterAlias(
68 DCHECK(name_map_
.find(name
) != name_map_
.end());
69 DCHECK(name_map_
.find(alias
) == name_map_
.end());
70 name_map_
[alias
] = name_map_
[name
];
73 const APIPermissionInfo
* PermissionsInfo::RegisterPermission(
77 PermissionMessage::ID message_id
,
79 const APIPermissionInfo::APIPermissionConstructor constructor
) {
80 DCHECK(id_map_
.find(id
) == id_map_
.end());
81 DCHECK(name_map_
.find(name
) == name_map_
.end());
83 APIPermissionInfo
* permission
= new APIPermissionInfo(
84 id
, name
, l10n_message_id
, message_id
, flags
, constructor
);
86 id_map_
[id
] = permission
;
87 name_map_
[name
] = permission
;
94 } // namespace extensions