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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h" 6 7 #include "base/callback.h" 8 #include "base/json/json_reader.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/prefs/pref_value_map.h" 11 #include "base/values.h" 12 #include "chrome/browser/ui/ash/chrome_launcher_prefs.h" 13 #include "chrome/common/pref_names.h" 14 #include "components/policy/core/browser/policy_error_map.h" 15 #include "components/policy/core/common/external_data_fetcher.h" 16 #include "components/policy/core/common/policy_map.h" 17 #include "components/policy/core/common/schema.h" 18 #include "policy/policy_constants.h" 19 #include "testing/gtest/include/gtest/gtest.h" 20 21 namespace policy { 22 23 namespace { 24 25 // Test cases for the screen magnifier type policy setting. 26 class ScreenMagnifierPolicyHandlerTest : public testing::Test { 27 protected: 28 PolicyMap policy_; 29 PrefValueMap prefs_; 30 ScreenMagnifierPolicyHandler handler_; 31 }; 32 33 class LoginScreenPowerManagementPolicyHandlerTest : public testing::Test { 34 protected: 35 LoginScreenPowerManagementPolicyHandlerTest(); 36 37 virtual void SetUp() OVERRIDE; 38 39 Schema chrome_schema_; 40 41 private: 42 DISALLOW_COPY_AND_ASSIGN(LoginScreenPowerManagementPolicyHandlerTest); 43 }; 44 45 LoginScreenPowerManagementPolicyHandlerTest:: 46 LoginScreenPowerManagementPolicyHandlerTest() { 47 } 48 49 void LoginScreenPowerManagementPolicyHandlerTest::SetUp() { 50 chrome_schema_ = Schema::Wrap(GetChromeSchemaData()); 51 } 52 53 TEST_F(ScreenMagnifierPolicyHandlerTest, Default) { 54 handler_.ApplyPolicySettings(policy_, &prefs_); 55 EXPECT_FALSE( 56 prefs_.GetValue(prefs::kAccessibilityScreenMagnifierEnabled, NULL)); 57 EXPECT_FALSE(prefs_.GetValue(prefs::kAccessibilityScreenMagnifierType, NULL)); 58 } 59 60 TEST_F(ScreenMagnifierPolicyHandlerTest, Disabled) { 61 policy_.Set(key::kScreenMagnifierType, 62 POLICY_LEVEL_MANDATORY, 63 POLICY_SCOPE_USER, 64 new base::FundamentalValue(0), 65 NULL); 66 handler_.ApplyPolicySettings(policy_, &prefs_); 67 68 const base::Value* enabled = NULL; 69 EXPECT_TRUE( 70 prefs_.GetValue(prefs::kAccessibilityScreenMagnifierEnabled, &enabled)); 71 ASSERT_TRUE(enabled); 72 EXPECT_TRUE(base::FundamentalValue(false).Equals(enabled)); 73 74 const base::Value* type = NULL; 75 EXPECT_TRUE(prefs_.GetValue(prefs::kAccessibilityScreenMagnifierType, &type)); 76 ASSERT_TRUE(type); 77 EXPECT_TRUE(base::FundamentalValue(0).Equals(type)); 78 } 79 80 TEST_F(ScreenMagnifierPolicyHandlerTest, Enabled) { 81 policy_.Set(key::kScreenMagnifierType, 82 POLICY_LEVEL_MANDATORY, 83 POLICY_SCOPE_USER, 84 new base::FundamentalValue(1), 85 NULL); 86 handler_.ApplyPolicySettings(policy_, &prefs_); 87 88 const base::Value* enabled = NULL; 89 EXPECT_TRUE( 90 prefs_.GetValue(prefs::kAccessibilityScreenMagnifierEnabled, &enabled)); 91 ASSERT_TRUE(enabled); 92 EXPECT_TRUE(base::FundamentalValue(true).Equals(enabled)); 93 94 const base::Value* type = NULL; 95 EXPECT_TRUE(prefs_.GetValue(prefs::kAccessibilityScreenMagnifierType, &type)); 96 ASSERT_TRUE(type); 97 EXPECT_TRUE(base::FundamentalValue(1).Equals(type)); 98 } 99 100 TEST(ExternalDataPolicyHandlerTest, Empty) { 101 PolicyErrorMap errors; 102 EXPECT_TRUE(ExternalDataPolicyHandler(key::kUserAvatarImage) 103 .CheckPolicySettings(PolicyMap(), &errors)); 104 EXPECT_TRUE(errors.GetErrors(key::kUserAvatarImage).empty()); 105 } 106 107 TEST(ExternalDataPolicyHandlerTest, WrongType) { 108 PolicyMap policy_map; 109 policy_map.Set(key::kUserAvatarImage, 110 POLICY_LEVEL_MANDATORY, 111 POLICY_SCOPE_USER, 112 new base::FundamentalValue(false), 113 NULL); 114 PolicyErrorMap errors; 115 EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage) 116 .CheckPolicySettings(policy_map, &errors)); 117 EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty()); 118 } 119 120 TEST(ExternalDataPolicyHandlerTest, MissingURL) { 121 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 122 dict->SetString("hash", "1234567890123456789012345678901234567890"); 123 PolicyMap policy_map; 124 policy_map.Set(key::kUserAvatarImage, 125 POLICY_LEVEL_MANDATORY, 126 POLICY_SCOPE_USER, 127 dict.release(), 128 NULL); 129 PolicyErrorMap errors; 130 EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage) 131 .CheckPolicySettings(policy_map, &errors)); 132 EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty()); 133 } 134 135 TEST(ExternalDataPolicyHandlerTest, InvalidURL) { 136 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 137 dict->SetString("url", "http://"); 138 dict->SetString("hash", "1234567890123456789012345678901234567890"); 139 PolicyMap policy_map; 140 policy_map.Set(key::kUserAvatarImage, 141 POLICY_LEVEL_MANDATORY, 142 POLICY_SCOPE_USER, 143 dict.release(), 144 NULL); 145 PolicyErrorMap errors; 146 EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage) 147 .CheckPolicySettings(policy_map, &errors)); 148 EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty()); 149 } 150 151 TEST(ExternalDataPolicyHandlerTest, MissingHash) { 152 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 153 dict->SetString("url", "http://localhost/"); 154 PolicyMap policy_map; 155 policy_map.Set(key::kUserAvatarImage, 156 POLICY_LEVEL_MANDATORY, 157 POLICY_SCOPE_USER, 158 dict.release(), 159 NULL); 160 PolicyErrorMap errors; 161 EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage) 162 .CheckPolicySettings(policy_map, &errors)); 163 EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty()); 164 } 165 166 TEST(ExternalDataPolicyHandlerTest, InvalidHash) { 167 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 168 dict->SetString("url", "http://localhost/"); 169 dict->SetString("hash", "1234"); 170 PolicyMap policy_map; 171 policy_map.Set(key::kUserAvatarImage, 172 POLICY_LEVEL_MANDATORY, 173 POLICY_SCOPE_USER, 174 dict.release(), 175 NULL); 176 PolicyErrorMap errors; 177 EXPECT_FALSE(ExternalDataPolicyHandler(key::kUserAvatarImage) 178 .CheckPolicySettings(policy_map, &errors)); 179 EXPECT_FALSE(errors.GetErrors(key::kUserAvatarImage).empty()); 180 } 181 182 TEST(ExternalDataPolicyHandlerTest, Valid) { 183 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); 184 dict->SetString("url", "http://localhost/"); 185 dict->SetString( 186 "hash", 187 "1234567890123456789012345678901234567890123456789012345678901234"); 188 PolicyMap policy_map; 189 policy_map.Set(key::kUserAvatarImage, 190 POLICY_LEVEL_MANDATORY, 191 POLICY_SCOPE_USER, 192 dict.release(), 193 NULL); 194 PolicyErrorMap errors; 195 EXPECT_TRUE(ExternalDataPolicyHandler(key::kUserAvatarImage) 196 .CheckPolicySettings(policy_map, &errors)); 197 EXPECT_TRUE(errors.GetErrors(key::kUserAvatarImage).empty()); 198 } 199 200 const char kLoginScreenPowerManagementPolicy[] = 201 "{" 202 " \"AC\": {" 203 " \"Delays\": {" 204 " \"ScreenDim\": 5000," 205 " \"ScreenOff\": 7000," 206 " \"Idle\": 9000" 207 " }," 208 " \"IdleAction\": \"DoNothing\"" 209 " }," 210 " \"Battery\": {" 211 " \"Delays\": {" 212 " \"ScreenDim\": 1000," 213 " \"ScreenOff\": 3000," 214 " \"Idle\": 4000" 215 " }," 216 " \"IdleAction\": \"DoNothing\"" 217 " }," 218 " \"LidCloseAction\": \"DoNothing\"," 219 " \"UserActivityScreenDimDelayScale\": 300" 220 "}"; 221 222 } // namespace 223 224 TEST(NetworkConfigurationPolicyHandlerTest, Empty) { 225 PolicyMap policy_map; 226 scoped_ptr<NetworkConfigurationPolicyHandler> handler( 227 NetworkConfigurationPolicyHandler::CreateForUserPolicy()); 228 PolicyErrorMap errors; 229 EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors)); 230 EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty()); 231 } 232 233 TEST(NetworkConfigurationPolicyHandlerTest, ValidONC) { 234 const std::string kTestONC( 235 "{" 236 " \"NetworkConfigurations\": [{" 237 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," 238 " \"Type\": \"WiFi\"," 239 " \"Name\": \"some name\"," 240 " \"WiFi\": {" 241 " \"Security\": \"WEP-PSK\"," 242 " \"SSID\": \"ssid\"," 243 " \"Passphrase\": \"pass\"," 244 " }" 245 " }]" 246 "}"); 247 248 PolicyMap policy_map; 249 policy_map.Set(key::kOpenNetworkConfiguration, 250 POLICY_LEVEL_MANDATORY, 251 POLICY_SCOPE_USER, 252 new base::StringValue(kTestONC), 253 NULL); 254 scoped_ptr<NetworkConfigurationPolicyHandler> handler( 255 NetworkConfigurationPolicyHandler::CreateForUserPolicy()); 256 PolicyErrorMap errors; 257 EXPECT_TRUE(handler->CheckPolicySettings(policy_map, &errors)); 258 EXPECT_TRUE(errors.GetErrors(key::kOpenNetworkConfiguration).empty()); 259 } 260 261 TEST(NetworkConfigurationPolicyHandlerTest, WrongType) { 262 PolicyMap policy_map; 263 policy_map.Set(key::kOpenNetworkConfiguration, 264 POLICY_LEVEL_MANDATORY, 265 POLICY_SCOPE_USER, 266 new base::FundamentalValue(false), 267 NULL); 268 scoped_ptr<NetworkConfigurationPolicyHandler> handler( 269 NetworkConfigurationPolicyHandler::CreateForUserPolicy()); 270 PolicyErrorMap errors; 271 EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors)); 272 EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty()); 273 } 274 275 TEST(NetworkConfigurationPolicyHandlerTest, JSONParseError) { 276 const std::string kTestONC("I'm not proper JSON!"); 277 PolicyMap policy_map; 278 policy_map.Set(key::kOpenNetworkConfiguration, 279 POLICY_LEVEL_MANDATORY, 280 POLICY_SCOPE_USER, 281 new base::StringValue(kTestONC), 282 NULL); 283 scoped_ptr<NetworkConfigurationPolicyHandler> handler( 284 NetworkConfigurationPolicyHandler::CreateForUserPolicy()); 285 PolicyErrorMap errors; 286 EXPECT_FALSE(handler->CheckPolicySettings(policy_map, &errors)); 287 EXPECT_FALSE(errors.GetErrors(key::kOpenNetworkConfiguration).empty()); 288 } 289 290 TEST(NetworkConfigurationPolicyHandlerTest, Sanitization) { 291 const std::string kTestONC( 292 "{" 293 " \"NetworkConfigurations\": [{" 294 " \"GUID\": \"{485d6076-dd44-6b6d-69787465725f5045}\"," 295 " \"Type\": \"WiFi\"," 296 " \"Name\": \"some name\"," 297 " \"WiFi\": {" 298 " \"Security\": \"WEP-PSK\"," 299 " \"SSID\": \"ssid\"," 300 " \"Passphrase\": \"pass\"," 301 " }" 302 " }]" 303 "}"); 304 305 PolicyMap policy_map; 306 policy_map.Set(key::kOpenNetworkConfiguration, 307 POLICY_LEVEL_MANDATORY, 308 POLICY_SCOPE_USER, 309 new base::StringValue(kTestONC), 310 NULL); 311 scoped_ptr<NetworkConfigurationPolicyHandler> handler( 312 NetworkConfigurationPolicyHandler::CreateForUserPolicy()); 313 PolicyErrorMap errors; 314 handler->PrepareForDisplaying(&policy_map); 315 const base::Value* sanitized = 316 policy_map.GetValue(key::kOpenNetworkConfiguration); 317 ASSERT_TRUE(sanitized); 318 std::string sanitized_onc; 319 EXPECT_TRUE(sanitized->GetAsString(&sanitized_onc)); 320 EXPECT_FALSE(sanitized_onc.empty()); 321 EXPECT_EQ(std::string::npos, sanitized_onc.find("pass")); 322 } 323 324 TEST(PinnedLauncherAppsPolicyHandler, PrefTranslation) { 325 base::ListValue list; 326 PolicyMap policy_map; 327 PrefValueMap prefs; 328 base::ListValue expected_pinned_apps; 329 base::Value* value = NULL; 330 PinnedLauncherAppsPolicyHandler handler; 331 332 policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY, 333 POLICY_SCOPE_USER, list.DeepCopy(), NULL); 334 handler.ApplyPolicySettings(policy_map, &prefs); 335 EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value)); 336 EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value)); 337 338 base::StringValue entry1("abcdefghijklmnopabcdefghijklmnop"); 339 base::DictionaryValue* entry1_dict = new base::DictionaryValue(); 340 entry1_dict->Set(ash::kPinnedAppsPrefAppIDPath, entry1.DeepCopy()); 341 expected_pinned_apps.Append(entry1_dict); 342 list.Append(entry1.DeepCopy()); 343 policy_map.Set(key::kPinnedLauncherApps, POLICY_LEVEL_MANDATORY, 344 POLICY_SCOPE_USER, list.DeepCopy(), NULL); 345 prefs.Clear(); 346 handler.ApplyPolicySettings(policy_map, &prefs); 347 EXPECT_TRUE(prefs.GetValue(prefs::kPinnedLauncherApps, &value)); 348 EXPECT_TRUE(base::Value::Equals(&expected_pinned_apps, value)); 349 } 350 351 TEST_F(LoginScreenPowerManagementPolicyHandlerTest, Empty) { 352 PolicyMap policy_map; 353 LoginScreenPowerManagementPolicyHandler handler(chrome_schema_); 354 PolicyErrorMap errors; 355 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); 356 EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty()); 357 } 358 359 TEST_F(LoginScreenPowerManagementPolicyHandlerTest, ValidPolicy) { 360 PolicyMap policy_map; 361 policy_map.Set(key::kDeviceLoginScreenPowerManagement, 362 POLICY_LEVEL_MANDATORY, 363 POLICY_SCOPE_USER, 364 base::JSONReader::Read(kLoginScreenPowerManagementPolicy), 365 NULL); 366 LoginScreenPowerManagementPolicyHandler handler(chrome_schema_); 367 PolicyErrorMap errors; 368 EXPECT_TRUE(handler.CheckPolicySettings(policy_map, &errors)); 369 EXPECT_TRUE(errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty()); 370 } 371 372 TEST_F(LoginScreenPowerManagementPolicyHandlerTest, WrongType) { 373 PolicyMap policy_map; 374 policy_map.Set(key::kDeviceLoginScreenPowerManagement, 375 POLICY_LEVEL_MANDATORY, 376 POLICY_SCOPE_USER, 377 new base::FundamentalValue(false), 378 NULL); 379 LoginScreenPowerManagementPolicyHandler handler(chrome_schema_); 380 PolicyErrorMap errors; 381 EXPECT_FALSE(handler.CheckPolicySettings(policy_map, &errors)); 382 EXPECT_FALSE( 383 errors.GetErrors(key::kDeviceLoginScreenPowerManagement).empty()); 384 } 385 386 } // namespace policy 387