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

Side by Side Diff: components/policy/core/common/schema_map_unittest.cc

Issue 1940153002: Use std::unique_ptr to express ownership of base::Value in PolicyMap::Entry (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: another-fix Created 4 years, 7 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 "components/policy/core/common/schema_map.h" 5 #include "components/policy/core/common/schema_map.h"
6 6
7 #include "base/memory/ptr_util.h"
7 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
8 #include "base/values.h" 9 #include "base/values.h"
9 #include "components/policy/core/common/external_data_fetcher.h" 10 #include "components/policy/core/common/external_data_fetcher.h"
10 #include "components/policy/core/common/external_data_manager.h" 11 #include "components/policy/core/common/external_data_manager.h"
11 #include "components/policy/core/common/policy_bundle.h" 12 #include "components/policy/core/common/policy_bundle.h"
12 #include "components/policy/core/common/policy_map.h" 13 #include "components/policy/core/common/policy_map.h"
13 #include "components/policy/core/common/policy_types.h" 14 #include "components/policy/core/common/policy_types.h"
14 #include "components/policy/core/common/schema.h" 15 #include "components/policy/core/common/schema.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); 133 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map);
133 134
134 PolicyBundle bundle; 135 PolicyBundle bundle;
135 schema_map->FilterBundle(&bundle); 136 schema_map->FilterBundle(&bundle);
136 const PolicyBundle empty_bundle; 137 const PolicyBundle empty_bundle;
137 EXPECT_TRUE(bundle.Equals(empty_bundle)); 138 EXPECT_TRUE(bundle.Equals(empty_bundle));
138 139
139 // The Chrome namespace isn't filtered. 140 // The Chrome namespace isn't filtered.
140 PolicyBundle expected_bundle; 141 PolicyBundle expected_bundle;
141 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); 142 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, "");
142 expected_bundle.Get(chrome_ns).Set("ChromePolicy", 143 expected_bundle.Get(chrome_ns).Set(
143 POLICY_LEVEL_MANDATORY, 144 "ChromePolicy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
144 POLICY_SCOPE_USER, 145 POLICY_SOURCE_CLOUD, base::WrapUnique(new base::StringValue("value")),
145 POLICY_SOURCE_CLOUD, 146 nullptr);
146 new base::StringValue("value"),
147 NULL);
148 bundle.CopyFrom(expected_bundle); 147 bundle.CopyFrom(expected_bundle);
149 148
150 // Unknown components are filtered out. 149 // Unknown components are filtered out.
151 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz"); 150 PolicyNamespace another_extension_ns(POLICY_DOMAIN_EXTENSIONS, "xyz");
152 bundle.Get(another_extension_ns).Set("AnotherExtensionPolicy", 151 bundle.Get(another_extension_ns)
153 POLICY_LEVEL_MANDATORY, 152 .Set("AnotherExtensionPolicy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
154 POLICY_SCOPE_USER, 153 POLICY_SOURCE_CLOUD,
155 POLICY_SOURCE_CLOUD, 154 base::WrapUnique(new base::StringValue("value")), nullptr);
156 new base::StringValue("value"),
157 NULL);
158 schema_map->FilterBundle(&bundle); 155 schema_map->FilterBundle(&bundle);
159 EXPECT_TRUE(bundle.Equals(expected_bundle)); 156 EXPECT_TRUE(bundle.Equals(expected_bundle));
160 157
161 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc"); 158 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc");
162 PolicyMap& map = expected_bundle.Get(extension_ns); 159 PolicyMap& map = expected_bundle.Get(extension_ns);
163 base::ListValue list; 160 base::ListValue list;
164 list.AppendString("a"); 161 list.AppendString("a");
165 list.AppendString("b"); 162 list.AppendString("b");
166 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 163 map.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
167 POLICY_SOURCE_CLOUD, list.DeepCopy(), nullptr); 164 POLICY_SOURCE_CLOUD, list.CreateDeepCopy(), nullptr);
168 map.Set("boolean", 165 map.Set("boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
169 POLICY_LEVEL_MANDATORY,
170 POLICY_SCOPE_USER,
171 POLICY_SOURCE_CLOUD, 166 POLICY_SOURCE_CLOUD,
172 new base::FundamentalValue(true), 167 base::WrapUnique(new base::FundamentalValue(true)), nullptr);
173 NULL); 168 map.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
174 map.Set("integer", 169 POLICY_SOURCE_CLOUD, base::WrapUnique(new base::FundamentalValue(1)),
175 POLICY_LEVEL_MANDATORY, 170 nullptr);
176 POLICY_SCOPE_USER, 171 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
172 POLICY_SOURCE_CLOUD, base::Value::CreateNullValue(), nullptr);
173 map.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
177 POLICY_SOURCE_CLOUD, 174 POLICY_SOURCE_CLOUD,
178 new base::FundamentalValue(1), 175 base::WrapUnique(new base::FundamentalValue(1.2)), nullptr);
179 NULL);
180 map.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
181 POLICY_SOURCE_CLOUD, base::Value::CreateNullValue().release(),
182 nullptr);
183 map.Set("double",
184 POLICY_LEVEL_MANDATORY,
185 POLICY_SCOPE_USER,
186 POLICY_SOURCE_CLOUD,
187 new base::FundamentalValue(1.2),
188 NULL);
189 base::DictionaryValue dict; 176 base::DictionaryValue dict;
190 dict.SetString("a", "b"); 177 dict.SetString("a", "b");
191 dict.SetInteger("b", 2); 178 dict.SetInteger("b", 2);
192 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 179 map.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
193 POLICY_SOURCE_CLOUD, dict.DeepCopy(), nullptr); 180 POLICY_SOURCE_CLOUD, dict.CreateDeepCopy(), nullptr);
194 map.Set("string", 181 map.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
195 POLICY_LEVEL_MANDATORY, 182 POLICY_SOURCE_CLOUD, base::WrapUnique(new base::StringValue("value")),
196 POLICY_SCOPE_USER, 183 nullptr);
197 POLICY_SOURCE_CLOUD,
198 new base::StringValue("value"),
199 NULL);
200 184
201 bundle.MergeFrom(expected_bundle); 185 bundle.MergeFrom(expected_bundle);
202 bundle.Get(extension_ns).Set("Unexpected", 186 bundle.Get(extension_ns)
203 POLICY_LEVEL_MANDATORY, 187 .Set("Unexpected", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
204 POLICY_SCOPE_USER, 188 POLICY_SOURCE_CLOUD,
205 POLICY_SOURCE_CLOUD, 189 base::WrapUnique(new base::StringValue("to-be-removed")), nullptr);
206 new base::StringValue("to-be-removed"),
207 NULL);
208 190
209 schema_map->FilterBundle(&bundle); 191 schema_map->FilterBundle(&bundle);
210 EXPECT_TRUE(bundle.Equals(expected_bundle)); 192 EXPECT_TRUE(bundle.Equals(expected_bundle));
211 193
212 // Mismatched types are also removed. 194 // Mismatched types are also removed.
213 bundle.Clear(); 195 bundle.Clear();
214 PolicyMap& badmap = bundle.Get(extension_ns); 196 PolicyMap& badmap = bundle.Get(extension_ns);
215 badmap.Set("list", 197 badmap.Set("list", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
216 POLICY_LEVEL_MANDATORY,
217 POLICY_SCOPE_USER,
218 POLICY_SOURCE_CLOUD, 198 POLICY_SOURCE_CLOUD,
219 new base::FundamentalValue(false), 199 base::WrapUnique(new base::FundamentalValue(false)), nullptr);
220 NULL); 200 badmap.Set("boolean", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
221 badmap.Set("boolean",
222 POLICY_LEVEL_MANDATORY,
223 POLICY_SCOPE_USER,
224 POLICY_SOURCE_CLOUD, 201 POLICY_SOURCE_CLOUD,
225 new base::FundamentalValue(0), 202 base::WrapUnique(new base::FundamentalValue(0)), nullptr);
226 NULL); 203 badmap.Set("integer", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
227 badmap.Set("integer",
228 POLICY_LEVEL_MANDATORY,
229 POLICY_SCOPE_USER,
230 POLICY_SOURCE_CLOUD, 204 POLICY_SOURCE_CLOUD,
231 new base::FundamentalValue(false), 205 base::WrapUnique(new base::FundamentalValue(false)), nullptr);
232 NULL); 206 badmap.Set("null", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
233 badmap.Set("null",
234 POLICY_LEVEL_MANDATORY,
235 POLICY_SCOPE_USER,
236 POLICY_SOURCE_CLOUD, 207 POLICY_SOURCE_CLOUD,
237 new base::FundamentalValue(false), 208 base::WrapUnique(new base::FundamentalValue(false)), nullptr);
238 NULL); 209 badmap.Set("double", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
239 badmap.Set("double",
240 POLICY_LEVEL_MANDATORY,
241 POLICY_SCOPE_USER,
242 POLICY_SOURCE_CLOUD, 210 POLICY_SOURCE_CLOUD,
243 new base::FundamentalValue(false), 211 base::WrapUnique(new base::FundamentalValue(false)), nullptr);
244 NULL); 212 badmap.Set("object", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
245 badmap.Set("object",
246 POLICY_LEVEL_MANDATORY,
247 POLICY_SCOPE_USER,
248 POLICY_SOURCE_CLOUD, 213 POLICY_SOURCE_CLOUD,
249 new base::FundamentalValue(false), 214 base::WrapUnique(new base::FundamentalValue(false)), nullptr);
250 NULL);
251 badmap.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, 215 badmap.Set("string", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
252 POLICY_SOURCE_CLOUD, nullptr, 216 POLICY_SOURCE_CLOUD, nullptr,
253 new ExternalDataFetcher(base::WeakPtr<ExternalDataManager>(), 217 base::WrapUnique(new ExternalDataFetcher(nullptr, std::string())));
254 std::string()));
255 218
256 schema_map->FilterBundle(&bundle); 219 schema_map->FilterBundle(&bundle);
257 EXPECT_TRUE(bundle.Equals(empty_bundle)); 220 EXPECT_TRUE(bundle.Equals(empty_bundle));
258 } 221 }
259 222
260 TEST_F(SchemaMapTest, LegacyComponents) { 223 TEST_F(SchemaMapTest, LegacyComponents) {
261 std::string error; 224 std::string error;
262 Schema schema = Schema::Parse( 225 Schema schema = Schema::Parse(
263 "{" 226 "{"
264 " \"type\":\"object\"," 227 " \"type\":\"object\","
265 " \"properties\": {" 228 " \"properties\": {"
266 " \"String\": { \"type\": \"string\" }" 229 " \"String\": { \"type\": \"string\" }"
267 " }" 230 " }"
268 "}", &error); 231 "}", &error);
269 ASSERT_TRUE(schema.valid()) << error; 232 ASSERT_TRUE(schema.valid()) << error;
270 233
271 DomainMap domain_map; 234 DomainMap domain_map;
272 domain_map[POLICY_DOMAIN_EXTENSIONS]["with-schema"] = schema; 235 domain_map[POLICY_DOMAIN_EXTENSIONS]["with-schema"] = schema;
273 domain_map[POLICY_DOMAIN_EXTENSIONS]["without-schema"] = Schema(); 236 domain_map[POLICY_DOMAIN_EXTENSIONS]["without-schema"] = Schema();
274 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map); 237 scoped_refptr<SchemaMap> schema_map = new SchemaMap(domain_map);
275 238
276 // |bundle| contains policies loaded by a policy provider. 239 // |bundle| contains policies loaded by a policy provider.
277 PolicyBundle bundle; 240 PolicyBundle bundle;
278 241
279 // Known components with schemas are filtered. 242 // Known components with schemas are filtered.
280 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema"); 243 PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "with-schema");
281 bundle.Get(extension_ns).Set("String", 244 bundle.Get(extension_ns)
282 POLICY_LEVEL_MANDATORY, 245 .Set("String", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
283 POLICY_SCOPE_USER, 246 POLICY_SOURCE_CLOUD,
284 POLICY_SOURCE_CLOUD, 247 base::WrapUnique(new base::StringValue("value 1")), nullptr);
285 new base::StringValue("value 1"),
286 NULL);
287 248
288 // The Chrome namespace isn't filtered. 249 // The Chrome namespace isn't filtered.
289 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, ""); 250 PolicyNamespace chrome_ns(POLICY_DOMAIN_CHROME, "");
290 bundle.Get(chrome_ns).Set("ChromePolicy", 251 bundle.Get(chrome_ns).Set("ChromePolicy", POLICY_LEVEL_MANDATORY,
291 POLICY_LEVEL_MANDATORY, 252 POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD,
292 POLICY_SCOPE_USER, 253 base::WrapUnique(new base::StringValue("value 3")),
293 POLICY_SOURCE_CLOUD, 254 nullptr);
294 new base::StringValue("value 3"),
295 NULL);
296 255
297 PolicyBundle expected_bundle; 256 PolicyBundle expected_bundle;
298 expected_bundle.MergeFrom(bundle); 257 expected_bundle.MergeFrom(bundle);
299 258
300 // Known components without a schema are filtered out completely. 259 // Known components without a schema are filtered out completely.
301 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema"); 260 PolicyNamespace without_schema_ns(POLICY_DOMAIN_EXTENSIONS, "without-schema");
302 bundle.Get(without_schema_ns).Set("Schemaless", 261 bundle.Get(without_schema_ns)
303 POLICY_LEVEL_MANDATORY, 262 .Set("Schemaless", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
304 POLICY_SCOPE_USER, 263 POLICY_SOURCE_CLOUD,
305 POLICY_SOURCE_CLOUD, 264 base::WrapUnique(new base::StringValue("value 2")), nullptr);
306 new base::StringValue("value 2"),
307 NULL);
308 265
309 // Unknown policies of known components with a schema are removed. 266 // Unknown policies of known components with a schema are removed.
310 bundle.Get(extension_ns).Set("Surprise", 267 bundle.Get(extension_ns)
311 POLICY_LEVEL_MANDATORY, 268 .Set("Surprise", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
312 POLICY_SCOPE_USER, 269 POLICY_SOURCE_CLOUD,
313 POLICY_SOURCE_CLOUD, 270 base::WrapUnique(new base::StringValue("value 4")), nullptr);
314 new base::StringValue("value 4"),
315 NULL);
316 271
317 // Unknown components are removed. 272 // Unknown components are removed.
318 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown"); 273 PolicyNamespace unknown_ns(POLICY_DOMAIN_EXTENSIONS, "unknown");
319 bundle.Get(unknown_ns).Set("Surprise", 274 bundle.Get(unknown_ns)
320 POLICY_LEVEL_MANDATORY, 275 .Set("Surprise", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
321 POLICY_SCOPE_USER, 276 POLICY_SOURCE_CLOUD,
322 POLICY_SOURCE_CLOUD, 277 base::WrapUnique(new base::StringValue("value 5")), nullptr);
323 new base::StringValue("value 5"),
324 NULL);
325 278
326 schema_map->FilterBundle(&bundle); 279 schema_map->FilterBundle(&bundle);
327 EXPECT_TRUE(bundle.Equals(expected_bundle)); 280 EXPECT_TRUE(bundle.Equals(expected_bundle));
328 } 281 }
329 282
330 TEST_F(SchemaMapTest, GetChanges) { 283 TEST_F(SchemaMapTest, GetChanges) {
331 DomainMap map; 284 DomainMap map;
332 map[POLICY_DOMAIN_CHROME][""] = Schema(); 285 map[POLICY_DOMAIN_CHROME][""] = Schema();
333 scoped_refptr<SchemaMap> older = new SchemaMap(map); 286 scoped_refptr<SchemaMap> older = new SchemaMap(map);
334 map[POLICY_DOMAIN_CHROME][""] = Schema(); 287 map[POLICY_DOMAIN_CHROME][""] = Schema();
(...skipping 18 matching lines...) Expand all
353 newer = new SchemaMap(map); 306 newer = new SchemaMap(map);
354 newer->GetChanges(older, &removed, &added); 307 newer->GetChanges(older, &removed, &added);
355 ASSERT_EQ(2u, removed.size()); 308 ASSERT_EQ(2u, removed.size());
356 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]); 309 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_CHROME, ""), removed[0]);
357 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]); 310 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "xyz"), removed[1]);
358 ASSERT_EQ(1u, added.size()); 311 ASSERT_EQ(1u, added.size());
359 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]); 312 EXPECT_EQ(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, "abc"), added[0]);
360 } 313 }
361 314
362 } // namespace policy 315 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698