blob: 3b80e9f3159e47f60c9cb694d6b799399ff6a7da [file] [log] [blame]
// 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 <string>
#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<base::ListValue> 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<base::ListValue> 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