| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "extensions/common/permissions/permissions_info.h" | 5 #include "extensions/common/permissions/permissions_info.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| 11 #include "extensions/common/alias.h" |
| 11 | 12 |
| 12 namespace extensions { | 13 namespace extensions { |
| 13 | 14 |
| 14 static base::LazyInstance<PermissionsInfo> g_permissions_info = | 15 static base::LazyInstance<PermissionsInfo> g_permissions_info = |
| 15 LAZY_INSTANCE_INITIALIZER; | 16 LAZY_INSTANCE_INITIALIZER; |
| 16 | 17 |
| 17 // static | 18 // static |
| 18 PermissionsInfo* PermissionsInfo::GetInstance() { | 19 PermissionsInfo* PermissionsInfo::GetInstance() { |
| 19 return g_permissions_info.Pointer(); | 20 return g_permissions_info.Pointer(); |
| 20 } | 21 } |
| 21 | 22 |
| 22 void PermissionsInfo::AddProvider(const PermissionsProvider& provider) { | 23 void PermissionsInfo::AddProvider( |
| 23 auto permissions = provider.GetAllPermissions(); | 24 const PermissionsProvider& permissions_provider, |
| 24 auto aliases = provider.GetAllAliases(); | 25 const std::vector<Alias>& aliases) { |
| 26 auto permissions = permissions_provider.GetAllPermissions(); |
| 25 | 27 |
| 26 for (auto& permission : permissions) | 28 for (auto& permission : permissions) |
| 27 RegisterPermission(std::move(permission)); | 29 RegisterPermission(std::move(permission)); |
| 28 for (const auto& alias : aliases) | 30 for (const auto& alias : aliases) |
| 29 RegisterAlias(alias.name, alias.alias); | 31 RegisterAlias(alias); |
| 30 } | 32 } |
| 31 | 33 |
| 32 const APIPermissionInfo* PermissionsInfo::GetByID(APIPermission::ID id) const { | 34 const APIPermissionInfo* PermissionsInfo::GetByID(APIPermission::ID id) const { |
| 33 IDMap::const_iterator i = id_map_.find(id); | 35 IDMap::const_iterator i = id_map_.find(id); |
| 34 return (i == id_map_.end()) ? nullptr : i->second.get(); | 36 return (i == id_map_.end()) ? nullptr : i->second.get(); |
| 35 } | 37 } |
| 36 | 38 |
| 37 const APIPermissionInfo* PermissionsInfo::GetByName( | 39 const APIPermissionInfo* PermissionsInfo::GetByName( |
| 38 const std::string& name) const { | 40 const std::string& name) const { |
| 39 NameMap::const_iterator i = name_map_.find(name); | 41 NameMap::const_iterator i = name_map_.find(name); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 65 return base::StartsWith(i->first, name + '.', base::CompareCase::SENSITIVE); | 67 return base::StartsWith(i->first, name + '.', base::CompareCase::SENSITIVE); |
| 66 } | 68 } |
| 67 | 69 |
| 68 PermissionsInfo::PermissionsInfo() | 70 PermissionsInfo::PermissionsInfo() |
| 69 : permission_count_(0) { | 71 : permission_count_(0) { |
| 70 } | 72 } |
| 71 | 73 |
| 72 PermissionsInfo::~PermissionsInfo() { | 74 PermissionsInfo::~PermissionsInfo() { |
| 73 } | 75 } |
| 74 | 76 |
| 75 void PermissionsInfo::RegisterAlias( | 77 void PermissionsInfo::RegisterAlias(const Alias& alias) { |
| 76 const char* name, | 78 DCHECK(base::ContainsKey(name_map_, alias.real_name())); |
| 77 const char* alias) { | 79 DCHECK(!base::ContainsKey(name_map_, alias.name())); |
| 78 DCHECK(base::ContainsKey(name_map_, name)); | 80 name_map_[alias.name()] = name_map_[alias.real_name()]; |
| 79 DCHECK(!base::ContainsKey(name_map_, alias)); | |
| 80 name_map_[alias] = name_map_[name]; | |
| 81 } | 81 } |
| 82 | 82 |
| 83 void PermissionsInfo::RegisterPermission( | 83 void PermissionsInfo::RegisterPermission( |
| 84 std::unique_ptr<APIPermissionInfo> permission) { | 84 std::unique_ptr<APIPermissionInfo> permission) { |
| 85 DCHECK(!base::ContainsKey(id_map_, permission->id())); | 85 DCHECK(!base::ContainsKey(id_map_, permission->id())); |
| 86 DCHECK(!base::ContainsKey(name_map_, permission->name())); | 86 DCHECK(!base::ContainsKey(name_map_, permission->name())); |
| 87 | 87 |
| 88 name_map_[permission->name()] = permission.get(); | 88 name_map_[permission->name()] = permission.get(); |
| 89 id_map_[permission->id()] = std::move(permission); | 89 id_map_[permission->id()] = std::move(permission); |
| 90 | 90 |
| 91 permission_count_++; | 91 permission_count_++; |
| 92 } | 92 } |
| 93 | 93 |
| 94 } // namespace extensions | 94 } // namespace extensions |
| OLD | NEW |