| 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 AliasProvider& alias_provider) { |
| 26 auto permissions = permissions_provider.GetAllPermissions(); |
| 27 auto aliases = alias_provider.GetValidPermissionAliases(); |
| 25 | 28 |
| 26 for (auto& permission : permissions) | 29 for (auto& permission : permissions) |
| 27 RegisterPermission(std::move(permission)); | 30 RegisterPermission(std::move(permission)); |
| 28 for (const auto& alias : aliases) | 31 for (const auto& alias : aliases) |
| 29 RegisterAlias(alias.name, alias.alias); | 32 RegisterAlias(alias); |
| 30 } | 33 } |
| 31 | 34 |
| 32 const APIPermissionInfo* PermissionsInfo::GetByID(APIPermission::ID id) const { | 35 const APIPermissionInfo* PermissionsInfo::GetByID(APIPermission::ID id) const { |
| 33 IDMap::const_iterator i = id_map_.find(id); | 36 IDMap::const_iterator i = id_map_.find(id); |
| 34 return (i == id_map_.end()) ? nullptr : i->second.get(); | 37 return (i == id_map_.end()) ? nullptr : i->second.get(); |
| 35 } | 38 } |
| 36 | 39 |
| 37 const APIPermissionInfo* PermissionsInfo::GetByName( | 40 const APIPermissionInfo* PermissionsInfo::GetByName( |
| 38 const std::string& name) const { | 41 const std::string& name) const { |
| 39 NameMap::const_iterator i = name_map_.find(name); | 42 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); | 68 return base::StartsWith(i->first, name + '.', base::CompareCase::SENSITIVE); |
| 66 } | 69 } |
| 67 | 70 |
| 68 PermissionsInfo::PermissionsInfo() | 71 PermissionsInfo::PermissionsInfo() |
| 69 : permission_count_(0) { | 72 : permission_count_(0) { |
| 70 } | 73 } |
| 71 | 74 |
| 72 PermissionsInfo::~PermissionsInfo() { | 75 PermissionsInfo::~PermissionsInfo() { |
| 73 } | 76 } |
| 74 | 77 |
| 75 void PermissionsInfo::RegisterAlias( | 78 void PermissionsInfo::RegisterAlias(const Alias& alias) { |
| 76 const char* name, | 79 DCHECK(base::ContainsKey(name_map_, alias.real_name())); |
| 77 const char* alias) { | 80 DCHECK(!base::ContainsKey(name_map_, alias.name())); |
| 78 DCHECK(base::ContainsKey(name_map_, name)); | 81 name_map_[alias.name()] = name_map_[alias.real_name()]; |
| 79 DCHECK(!base::ContainsKey(name_map_, alias)); | |
| 80 name_map_[alias] = name_map_[name]; | |
| 81 } | 82 } |
| 82 | 83 |
| 83 void PermissionsInfo::RegisterPermission( | 84 void PermissionsInfo::RegisterPermission( |
| 84 std::unique_ptr<APIPermissionInfo> permission) { | 85 std::unique_ptr<APIPermissionInfo> permission) { |
| 85 DCHECK(!base::ContainsKey(id_map_, permission->id())); | 86 DCHECK(!base::ContainsKey(id_map_, permission->id())); |
| 86 DCHECK(!base::ContainsKey(name_map_, permission->name())); | 87 DCHECK(!base::ContainsKey(name_map_, permission->name())); |
| 87 | 88 |
| 88 name_map_[permission->name()] = permission.get(); | 89 name_map_[permission->name()] = permission.get(); |
| 89 id_map_[permission->id()] = std::move(permission); | 90 id_map_[permission->id()] = std::move(permission); |
| 90 | 91 |
| 91 permission_count_++; | 92 permission_count_++; |
| 92 } | 93 } |
| 93 | 94 |
| 94 } // namespace extensions | 95 } // namespace extensions |
| OLD | NEW |