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/api_permission_set.h" | 5 #include "extensions/common/permissions/api_permission_set.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
11 #include "extensions/common/error_utils.h" | 11 #include "extensions/common/error_utils.h" |
12 #include "extensions/common/manifest_constants.h" | 12 #include "extensions/common/manifest_constants.h" |
13 #include "extensions/common/permissions/permissions_info.h" | 13 #include "extensions/common/permissions/permissions_info.h" |
14 | 14 |
15 namespace extensions { | 15 namespace extensions { |
16 | 16 |
17 namespace errors = manifest_errors; | 17 namespace errors = manifest_errors; |
18 | 18 |
19 namespace { | 19 namespace { |
20 | 20 |
21 bool CreateAPIPermission( | 21 bool CreateAPIPermission( |
22 const std::string& permission_str, | 22 const std::string& permission_str, |
23 const base::Value* permission_value, | 23 const base::Value* permission_value, |
24 APIPermissionSet::ParseSource source, | 24 APIPermissionSet::ParseSource source, |
25 APIPermissionSet* api_permissions, | 25 APIPermissionSet* api_permissions, |
26 string16* error, | 26 base::string16* error, |
27 std::vector<std::string>* unhandled_permissions) { | 27 std::vector<std::string>* unhandled_permissions) { |
28 | 28 |
29 const APIPermissionInfo* permission_info = | 29 const APIPermissionInfo* permission_info = |
30 PermissionsInfo::GetInstance()->GetByName(permission_str); | 30 PermissionsInfo::GetInstance()->GetByName(permission_str); |
31 if (permission_info) { | 31 if (permission_info) { |
32 scoped_ptr<APIPermission> permission( | 32 scoped_ptr<APIPermission> permission( |
33 permission_info->CreateAPIPermission()); | 33 permission_info->CreateAPIPermission()); |
34 if (source != APIPermissionSet::kAllowInternalPermissions && | 34 if (source != APIPermissionSet::kAllowInternalPermissions && |
35 permission_info->is_internal()) { | 35 permission_info->is_internal()) { |
36 // An internal permission specified in permissions list is an error. | 36 // An internal permission specified in permissions list is an error. |
(...skipping 22 matching lines...) Expand all Loading... |
59 else | 59 else |
60 LOG(WARNING) << "Unknown permission[" << permission_str << "]."; | 60 LOG(WARNING) << "Unknown permission[" << permission_str << "]."; |
61 | 61 |
62 return true; | 62 return true; |
63 } | 63 } |
64 | 64 |
65 bool ParseChildPermissions(const std::string& base_name, | 65 bool ParseChildPermissions(const std::string& base_name, |
66 const base::Value* permission_value, | 66 const base::Value* permission_value, |
67 APIPermissionSet::ParseSource source, | 67 APIPermissionSet::ParseSource source, |
68 APIPermissionSet* api_permissions, | 68 APIPermissionSet* api_permissions, |
69 string16* error, | 69 base::string16* error, |
70 std::vector<std::string>* unhandled_permissions) { | 70 std::vector<std::string>* unhandled_permissions) { |
71 if (permission_value) { | 71 if (permission_value) { |
72 const base::ListValue* permissions; | 72 const base::ListValue* permissions; |
73 if (!permission_value->GetAsList(&permissions)) { | 73 if (!permission_value->GetAsList(&permissions)) { |
74 if (error) { | 74 if (error) { |
75 *error = ErrorUtils::FormatErrorMessageUTF16( | 75 *error = ErrorUtils::FormatErrorMessageUTF16( |
76 errors::kInvalidPermission, base_name); | 76 errors::kInvalidPermission, base_name); |
77 return false; | 77 return false; |
78 } | 78 } |
79 LOG(WARNING) << "Permission value is not a list."; | 79 LOG(WARNING) << "Permission value is not a list."; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 | 117 |
118 void APIPermissionSet::insert(APIPermission* permission) { | 118 void APIPermissionSet::insert(APIPermission* permission) { |
119 BaseSetOperators<APIPermissionSet>::insert(permission); | 119 BaseSetOperators<APIPermissionSet>::insert(permission); |
120 } | 120 } |
121 | 121 |
122 // static | 122 // static |
123 bool APIPermissionSet::ParseFromJSON( | 123 bool APIPermissionSet::ParseFromJSON( |
124 const base::ListValue* permissions, | 124 const base::ListValue* permissions, |
125 APIPermissionSet::ParseSource source, | 125 APIPermissionSet::ParseSource source, |
126 APIPermissionSet* api_permissions, | 126 APIPermissionSet* api_permissions, |
127 string16* error, | 127 base::string16* error, |
128 std::vector<std::string>* unhandled_permissions) { | 128 std::vector<std::string>* unhandled_permissions) { |
129 for (size_t i = 0; i < permissions->GetSize(); ++i) { | 129 for (size_t i = 0; i < permissions->GetSize(); ++i) { |
130 std::string permission_str; | 130 std::string permission_str; |
131 const base::Value* permission_value = NULL; | 131 const base::Value* permission_value = NULL; |
132 if (!permissions->GetString(i, &permission_str)) { | 132 if (!permissions->GetString(i, &permission_str)) { |
133 const base::DictionaryValue* dict = NULL; | 133 const base::DictionaryValue* dict = NULL; |
134 // permission should be a string or a single key dict. | 134 // permission should be a string or a single key dict. |
135 if (!permissions->GetDictionary(i, &dict) || dict->size() != 1) { | 135 if (!permissions->GetDictionary(i, &dict) || dict->size() != 1) { |
136 if (error) { | 136 if (error) { |
137 *error = ErrorUtils::FormatErrorMessageUTF16( | 137 *error = ErrorUtils::FormatErrorMessageUTF16( |
(...skipping 28 matching lines...) Expand all Loading... |
166 // The fileSystem.write and fileSystem.directory permissions imply | 166 // The fileSystem.write and fileSystem.directory permissions imply |
167 // fileSystem.writeDirectory. | 167 // fileSystem.writeDirectory. |
168 // TODO(sammc): Remove this. See http://crbug.com/284849. | 168 // TODO(sammc): Remove this. See http://crbug.com/284849. |
169 if (ContainsKey(map(), APIPermission::kFileSystemWrite) && | 169 if (ContainsKey(map(), APIPermission::kFileSystemWrite) && |
170 ContainsKey(map(), APIPermission::kFileSystemDirectory)) { | 170 ContainsKey(map(), APIPermission::kFileSystemDirectory)) { |
171 insert(APIPermission::kFileSystemWriteDirectory); | 171 insert(APIPermission::kFileSystemWriteDirectory); |
172 } | 172 } |
173 } | 173 } |
174 | 174 |
175 } // namespace extensions | 175 } // namespace extensions |
OLD | NEW |