1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/json/json_reader.h"
6 #include "chrome/browser/policy/managed_bookmarks_policy_handler.h"
7 #include "components/bookmarks/common/bookmark_pref_names.h"
8 #include "components/policy/core/browser/configuration_policy_pref_store.h"
9 #include "components/policy/core/browser/configuration_policy_pref_store_test.h"
10 #include "components/policy/core/common/policy_map.h"
11 #include "components/policy/core/common/schema.h"
12 #include "extensions/common/value_builder.h"
13 #include "policy/policy_constants.h"
17 class ManagedBookmarksPolicyHandlerTest
18 : public ConfigurationPolicyPrefStoreTest
{
19 virtual void SetUp() OVERRIDE
{
20 Schema chrome_schema
= Schema::Wrap(GetChromeSchemaData());
21 handler_list_
.AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
22 new ManagedBookmarksPolicyHandler(chrome_schema
)));
26 TEST_F(ManagedBookmarksPolicyHandlerTest
, ApplyPolicySettings
) {
27 EXPECT_FALSE(store_
->GetValue(prefs::kManagedBookmarks
, NULL
));
30 policy
.Set(key::kManagedBookmarks
,
31 POLICY_LEVEL_MANDATORY
,
33 base::JSONReader::Read(
36 " \"name\": \"Google\","
37 " \"url\": \"google.com\""
40 " \"name\": \"Empty Folder\","
44 " \"name\": \"Big Folder\","
47 " \"name\": \"Youtube\","
48 " \"url\": \"youtube.com\""
51 " \"name\": \"Chromium\","
52 " \"url\": \"chromium.org\""
55 " \"name\": \"More Stuff\","
58 " \"name\": \"Bugs\","
59 " \"url\": \"crbug.com\""
67 UpdateProviderPolicy(policy
);
68 const base::Value
* pref_value
= NULL
;
69 EXPECT_TRUE(store_
->GetValue(prefs::kManagedBookmarks
, &pref_value
));
70 ASSERT_TRUE(pref_value
);
72 scoped_ptr
<base::Value
> expected(
73 extensions::ListBuilder()
74 .Append(extensions::DictionaryBuilder()
75 .Set("name", "Google")
76 .Set("url", "http://google.com/"))
77 .Append(extensions::DictionaryBuilder()
78 .Set("name", "Empty Folder")
79 .Set("children", extensions::ListBuilder().Pass()))
80 .Append(extensions::DictionaryBuilder()
81 .Set("name", "Big Folder")
82 .Set("children", extensions::ListBuilder()
83 .Append(extensions::DictionaryBuilder()
84 .Set("name", "Youtube")
85 .Set("url", "http://youtube.com/"))
86 .Append(extensions::DictionaryBuilder()
87 .Set("name", "Chromium")
88 .Set("url", "http://chromium.org/"))
89 .Append(extensions::DictionaryBuilder()
90 .Set("name", "More Stuff")
91 .Set("children", extensions::ListBuilder()
92 .Append(extensions::DictionaryBuilder()
94 .Set("url", "http://crbug.com/")
101 EXPECT_TRUE(pref_value
->Equals(expected
.get()));
104 TEST_F(ManagedBookmarksPolicyHandlerTest
, WrongPolicyType
) {
106 // The expected type is base::ListValue, but this policy sets it as an
107 // unparsed base::StringValue. Any type other than ListValue should fail.
108 policy
.Set(key::kManagedBookmarks
,
109 POLICY_LEVEL_MANDATORY
,
111 new base::StringValue(
114 " \"name\": \"Google\","
115 " \"url\": \"google.com\""
119 UpdateProviderPolicy(policy
);
120 EXPECT_FALSE(store_
->GetValue(prefs::kManagedBookmarks
, NULL
));
123 TEST_F(ManagedBookmarksPolicyHandlerTest
, UnknownKeys
) {
125 policy
.Set(key::kManagedBookmarks
,
126 POLICY_LEVEL_MANDATORY
,
128 base::JSONReader::Read(
131 " \"name\": \"Google\","
132 " \"unknown\": \"should be ignored\","
133 " \"url\": \"google.com\""
137 UpdateProviderPolicy(policy
);
138 const base::Value
* pref_value
= NULL
;
139 EXPECT_TRUE(store_
->GetValue(prefs::kManagedBookmarks
, &pref_value
));
140 ASSERT_TRUE(pref_value
);
142 scoped_ptr
<base::Value
> expected(
143 extensions::ListBuilder()
144 .Append(extensions::DictionaryBuilder()
145 .Set("name", "Google")
146 .Set("url", "http://google.com/"))
148 EXPECT_TRUE(pref_value
->Equals(expected
.get()));
151 TEST_F(ManagedBookmarksPolicyHandlerTest
, BadBookmark
) {
153 policy
.Set(key::kManagedBookmarks
,
154 POLICY_LEVEL_MANDATORY
,
156 base::JSONReader::Read(
159 " \"name\": \"Empty\","
163 " \"name\": \"Invalid type\","
167 " \"name\": \"Invalid URL\","
171 " \"name\": \"Google\","
172 " \"url\": \"google.com\""
176 UpdateProviderPolicy(policy
);
177 const base::Value
* pref_value
= NULL
;
178 EXPECT_TRUE(store_
->GetValue(prefs::kManagedBookmarks
, &pref_value
));
179 ASSERT_TRUE(pref_value
);
181 scoped_ptr
<base::Value
> expected(
182 extensions::ListBuilder()
183 .Append(extensions::DictionaryBuilder()
184 .Set("name", "Google")
185 .Set("url", "http://google.com/"))
187 EXPECT_TRUE(pref_value
->Equals(expected
.get()));
190 } // namespace policy