// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include "base/memory/scoped_ptr.h" #include "base/string16.h" #include "base/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/policy/policy_map.h" #include "chrome/browser/ui/webui/policy_ui.h" #include "grit/generated_resources.h" #include "policy/policy_constants.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h" namespace policy { TEST(PolicyUITest, ListPolicyValues) { base::StringValue kHomepage("http://google.com"); base::FundamentalValue kTrue(true); base::FundamentalValue kMaxConnections(10); base::ListValue kDisabledSchemes; kDisabledSchemes.Append(base::Value::CreateStringValue("aaa")); kDisabledSchemes.Append(base::Value::CreateStringValue("bbb")); kDisabledSchemes.Append(base::Value::CreateStringValue("ccc")); PolicyMap policies; policies.Set(key::kDisabledSchemes, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, kDisabledSchemes.DeepCopy()); policies.Set(key::kHomepageLocation, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, kHomepage.DeepCopy()); policies.Set(key::kMaxConnectionsPerProxy, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, kMaxConnections.DeepCopy()); policies.Set(key::kShowHomeButton, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE, kTrue.DeepCopy()); bool any_set = false; scoped_ptr list( PolicyUIHandler::GetPolicyStatusList(policies, &any_set)); ASSERT_TRUE(list.get()); // The policies are in the order defined in GetChromePolicyDefinitionList(), // which is sorted by name. Defined policies come before undefined policies. const PolicyDefinitionList* policy_list = GetChromePolicyDefinitionList(); size_t policy_list_size = policy_list->end - policy_list->begin; EXPECT_EQ(policy_list_size, list->GetSize()); EXPECT_TRUE(any_set); // Constants to compare against. const string16 kMandatory = l10n_util::GetStringUTF16(IDS_POLICY_LEVEL_MANDATORY); const string16 kRecommended = l10n_util::GetStringUTF16(IDS_POLICY_LEVEL_RECOMMENDED); const string16 kUser = l10n_util::GetStringUTF16(IDS_POLICY_SCOPE_USER); const string16 kMachine = l10n_util::GetStringUTF16(IDS_POLICY_SCOPE_MACHINE); const string16 kOK = l10n_util::GetStringUTF16(IDS_OK); const string16 kNotSet = l10n_util::GetStringUTF16(IDS_POLICY_NOT_SET); string16 string; bool boolean; base::Value* value; base::DictionaryValue* dict = NULL; ASSERT_TRUE(list->GetDictionary(0, &dict)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kName, &string)); EXPECT_EQ(ASCIIToUTF16("DisabledSchemes"), string); EXPECT_TRUE(dict->GetBoolean(PolicyUIHandler::kSet, &boolean)); EXPECT_TRUE(boolean); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kLevel, &string)); EXPECT_EQ(kMandatory, string); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kScope, &string)); EXPECT_EQ(kUser, string); EXPECT_TRUE(dict->Get(PolicyUIHandler::kValue, &value)); EXPECT_TRUE(base::Value::Equals(&kDisabledSchemes, value)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kStatus, &string)); EXPECT_EQ(kOK, string); ASSERT_TRUE(list->GetDictionary(1, &dict)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kName, &string)); EXPECT_EQ(ASCIIToUTF16("HomepageLocation"), string); EXPECT_TRUE(dict->GetBoolean(PolicyUIHandler::kSet, &boolean)); EXPECT_TRUE(boolean); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kLevel, &string)); EXPECT_EQ(kMandatory, string); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kScope, &string)); EXPECT_EQ(kMachine, string); EXPECT_TRUE(dict->Get(PolicyUIHandler::kValue, &value)); EXPECT_TRUE(base::Value::Equals(&kHomepage, value)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kStatus, &string)); EXPECT_EQ(kOK, string); ASSERT_TRUE(list->GetDictionary(2, &dict)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kName, &string)); EXPECT_EQ(ASCIIToUTF16("MaxConnectionsPerProxy"), string); EXPECT_TRUE(dict->GetBoolean(PolicyUIHandler::kSet, &boolean)); EXPECT_TRUE(boolean); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kLevel, &string)); EXPECT_EQ(kRecommended, string); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kScope, &string)); EXPECT_EQ(kUser, string); EXPECT_TRUE(dict->Get(PolicyUIHandler::kValue, &value)); EXPECT_TRUE(base::Value::Equals(&kMaxConnections, value)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kStatus, &string)); EXPECT_EQ(kOK, string); ASSERT_TRUE(list->GetDictionary(3, &dict)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kName, &string)); EXPECT_EQ(ASCIIToUTF16("ShowHomeButton"), string); EXPECT_TRUE(dict->GetBoolean(PolicyUIHandler::kSet, &boolean)); EXPECT_TRUE(boolean); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kLevel, &string)); EXPECT_EQ(kRecommended, string); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kScope, &string)); EXPECT_EQ(kMachine, string); EXPECT_TRUE(dict->Get(PolicyUIHandler::kValue, &value)); EXPECT_TRUE(base::Value::Equals(&kTrue, value)); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kStatus, &string)); EXPECT_EQ(kOK, string); // All the others should be unset. for (size_t i = 4; i < policy_list_size; ++i) { ASSERT_TRUE(list->GetDictionary(i, &dict)); EXPECT_TRUE(dict->GetBoolean(PolicyUIHandler::kSet, &boolean)); EXPECT_FALSE(boolean); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kLevel, &string)); EXPECT_TRUE(string.empty()); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kScope, &string)); EXPECT_TRUE(string.empty()); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kValue, &string)); EXPECT_TRUE(string.empty()); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kStatus, &string)); EXPECT_EQ(kNotSet, string); } } TEST(PolicyUITest, UnknownPolicy) { PolicyMap policies; policies.Set("NoSuchThing", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, base::Value::CreateBooleanValue(true)); bool any_set = false; scoped_ptr list( PolicyUIHandler::GetPolicyStatusList(policies, &any_set)); ASSERT_TRUE(list.get()); EXPECT_FALSE(any_set); ASSERT_GE(list->GetSize(), 1u); const string16 kUnknown = l10n_util::GetStringUTF16(IDS_POLICY_UNKNOWN); string16 string; bool boolean; base::DictionaryValue* dict; ASSERT_TRUE(list->GetDictionary(0, &dict)); EXPECT_TRUE(dict->GetBoolean(PolicyUIHandler::kSet, &boolean)); EXPECT_TRUE(boolean); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kLevel, &string)); EXPECT_TRUE(string.empty()); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kScope, &string)); EXPECT_TRUE(string.empty()); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kValue, &string)); EXPECT_TRUE(string.empty()); EXPECT_TRUE(dict->GetString(PolicyUIHandler::kStatus, &string)); EXPECT_EQ(kUnknown, string); } } // namespace policy