OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "chrome/browser/extensions/api/permissions/permissions_api_helpers.h" | 5 #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | |
11 | 10 |
12 #include "base/macros.h" | 11 #include "base/macros.h" |
13 #include "base/memory/ptr_util.h" | |
14 #include "base/values.h" | 12 #include "base/values.h" |
15 #include "chrome/common/extensions/api/permissions.h" | 13 #include "chrome/common/extensions/api/permissions.h" |
16 #include "extensions/common/permissions/permission_set.h" | 14 #include "extensions/common/permissions/permission_set.h" |
17 #include "extensions/common/url_pattern_set.h" | 15 #include "extensions/common/url_pattern_set.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
19 #include "url/gurl.h" | 17 #include "url/gurl.h" |
20 | 18 |
21 using extensions::api::permissions::Permissions; | 19 using extensions::api::permissions::Permissions; |
22 using extensions::permissions_api_helpers::PackPermissionSet; | 20 using extensions::permissions_api_helpers::PackPermissionSet; |
23 using extensions::permissions_api_helpers::UnpackPermissionSet; | 21 using extensions::permissions_api_helpers::UnpackPermissionSet; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 std::unique_ptr<base::ListValue> origins(new base::ListValue()); | 88 std::unique_ptr<base::ListValue> origins(new base::ListValue()); |
91 origins->AppendString("http://a.com/*"); | 89 origins->AppendString("http://a.com/*"); |
92 | 90 |
93 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 91 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
94 std::unique_ptr<const PermissionSet> permissions; | 92 std::unique_ptr<const PermissionSet> permissions; |
95 std::string error; | 93 std::string error; |
96 | 94 |
97 // Origins shouldn't have to be present. | 95 // Origins shouldn't have to be present. |
98 { | 96 { |
99 Permissions permissions_object; | 97 Permissions permissions_object; |
100 value->Set("permissions", apis->CreateDeepCopy()); | 98 value->Set("permissions", apis->DeepCopy()); |
101 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 99 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
102 permissions = UnpackPermissionSet(permissions_object, true, &error); | 100 permissions = UnpackPermissionSet(permissions_object, true, &error); |
103 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kTab)); | 101 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kTab)); |
104 EXPECT_TRUE(permissions.get()); | 102 EXPECT_TRUE(permissions.get()); |
105 EXPECT_TRUE(error.empty()); | 103 EXPECT_TRUE(error.empty()); |
106 } | 104 } |
107 | 105 |
108 // The api permissions don't need to be present either. | 106 // The api permissions don't need to be present either. |
109 { | 107 { |
110 Permissions permissions_object; | 108 Permissions permissions_object; |
111 value->Clear(); | 109 value->Clear(); |
112 value->Set("origins", origins->CreateDeepCopy()); | 110 value->Set("origins", origins->DeepCopy()); |
113 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 111 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
114 permissions = UnpackPermissionSet(permissions_object, true, &error); | 112 permissions = UnpackPermissionSet(permissions_object, true, &error); |
115 EXPECT_TRUE(permissions.get()); | 113 EXPECT_TRUE(permissions.get()); |
116 EXPECT_TRUE(error.empty()); | 114 EXPECT_TRUE(error.empty()); |
117 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); | 115 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); |
118 } | 116 } |
119 | 117 |
120 // Throw errors for non-string API permissions. | 118 // Throw errors for non-string API permissions. |
121 { | 119 { |
122 Permissions permissions_object; | 120 Permissions permissions_object; |
123 value->Clear(); | 121 value->Clear(); |
124 std::unique_ptr<base::ListValue> invalid_apis = apis->CreateDeepCopy(); | 122 std::unique_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); |
125 invalid_apis->AppendInteger(3); | 123 invalid_apis->AppendInteger(3); |
126 value->Set("permissions", std::move(invalid_apis)); | 124 value->Set("permissions", invalid_apis->DeepCopy()); |
127 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 125 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
128 } | 126 } |
129 | 127 |
130 // Throw errors for non-string origins. | 128 // Throw errors for non-string origins. |
131 { | 129 { |
132 Permissions permissions_object; | 130 Permissions permissions_object; |
133 value->Clear(); | 131 value->Clear(); |
134 std::unique_ptr<base::ListValue> invalid_origins = | 132 std::unique_ptr<base::ListValue> invalid_origins(origins->DeepCopy()); |
135 origins->CreateDeepCopy(); | |
136 invalid_origins->AppendInteger(3); | 133 invalid_origins->AppendInteger(3); |
137 value->Set("origins", std::move(invalid_origins)); | 134 value->Set("origins", invalid_origins->DeepCopy()); |
138 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 135 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
139 } | 136 } |
140 | 137 |
141 // Throw errors when "origins" or "permissions" are not list values. | 138 // Throw errors when "origins" or "permissions" are not list values. |
142 { | 139 { |
143 Permissions permissions_object; | 140 Permissions permissions_object; |
144 value->Clear(); | 141 value->Clear(); |
145 value->Set("origins", base::MakeUnique<base::Value>(2)); | 142 value->Set("origins", new base::Value(2)); |
146 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 143 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
147 } | 144 } |
148 | 145 |
149 { | 146 { |
150 Permissions permissions_object; | 147 Permissions permissions_object; |
151 value->Clear(); | 148 value->Clear(); |
152 value->Set("permissions", base::MakeUnique<base::Value>(2)); | 149 value->Set("permissions", new base::Value(2)); |
153 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 150 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
154 } | 151 } |
155 | 152 |
156 // Additional fields should be allowed. | 153 // Additional fields should be allowed. |
157 { | 154 { |
158 Permissions permissions_object; | 155 Permissions permissions_object; |
159 value->Clear(); | 156 value->Clear(); |
160 value->Set("origins", origins->CreateDeepCopy()); | 157 value->Set("origins", origins->DeepCopy()); |
161 value->Set("random", base::MakeUnique<base::Value>(3)); | 158 value->Set("random", new base::Value(3)); |
162 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 159 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
163 permissions = UnpackPermissionSet(permissions_object, true, &error); | 160 permissions = UnpackPermissionSet(permissions_object, true, &error); |
164 EXPECT_TRUE(permissions.get()); | 161 EXPECT_TRUE(permissions.get()); |
165 EXPECT_TRUE(error.empty()); | 162 EXPECT_TRUE(error.empty()); |
166 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); | 163 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); |
167 } | 164 } |
168 | 165 |
169 // Unknown permissions should throw an error. | 166 // Unknown permissions should throw an error. |
170 { | 167 { |
171 Permissions permissions_object; | 168 Permissions permissions_object; |
172 value->Clear(); | 169 value->Clear(); |
173 std::unique_ptr<base::ListValue> invalid_apis = apis->CreateDeepCopy(); | 170 std::unique_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); |
174 invalid_apis->AppendString("unknown_permission"); | 171 invalid_apis->AppendString("unknown_permission"); |
175 value->Set("permissions", std::move(invalid_apis)); | 172 value->Set("permissions", invalid_apis->DeepCopy()); |
176 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 173 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
177 permissions = UnpackPermissionSet(permissions_object, true, &error); | 174 permissions = UnpackPermissionSet(permissions_object, true, &error); |
178 EXPECT_FALSE(permissions.get()); | 175 EXPECT_FALSE(permissions.get()); |
179 EXPECT_FALSE(error.empty()); | 176 EXPECT_FALSE(error.empty()); |
180 EXPECT_EQ(error, "'unknown_permission' is not a recognized permission."); | 177 EXPECT_EQ(error, "'unknown_permission' is not a recognized permission."); |
181 } | 178 } |
182 } | 179 } |
183 | 180 |
184 } // namespace extensions | 181 } // namespace extensions |
OLD | NEW |