Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(461)

Side by Side Diff: extensions/common/permissions/permissions_info.cc

Issue 2379763003: Extract permission alias info from PermissionsProvider (Closed)
Patch Set: not nesting Alias in AliasProvider Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698