blob: abf025eca8d5f3db40dc800a09ee69f987d6c1b1 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/values.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/policy/chrome_browser_policy_connector.h"
#include "chrome/browser/policy/policy_test_utils.h"
#include "chrome/browser/policy/profile_policy_connector.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/test/base/chrome_test_utils.h"
#include "components/policy/core/common/policy_map.h"
#include "components/policy/core/common/policy_namespace.h"
#include "components/policy/core/common/policy_service.h"
#include "components/policy/core/common/policy_types.h"
#include "components/policy/policy_constants.h"
#include "components/prefs/pref_service.h"
#include "components/proxy_config/proxy_config_dictionary.h"
#include "components/proxy_config/proxy_config_pref_names.h"
#include "components/proxy_config/proxy_prefs.h"
#include "content/public/test/browser_test.h"
namespace policy {
namespace {
// Verify that all the proxy prefs are set to the specified expected values.
void VerifyProxyPrefs(PrefService* prefs,
const std::string& expected_proxy_server,
const std::string& expected_proxy_pac_url,
std::optional<bool> expected_proxy_pac_mandatory,
const std::string& expected_proxy_bypass_list,
const ProxyPrefs::ProxyMode& expected_proxy_mode) {
const base::Value::Dict& pref_dict =
prefs->GetDict(proxy_config::prefs::kProxy);
ProxyConfigDictionary dict(pref_dict.Clone());
std::string s;
bool b;
if (expected_proxy_server.empty()) {
EXPECT_FALSE(dict.GetProxyServer(&s));
} else {
ASSERT_TRUE(dict.GetProxyServer(&s));
EXPECT_EQ(expected_proxy_server, s);
}
if (expected_proxy_pac_url.empty()) {
EXPECT_FALSE(dict.GetPacUrl(&s));
} else {
ASSERT_TRUE(dict.GetPacUrl(&s));
EXPECT_EQ(expected_proxy_pac_url, s);
}
if (!expected_proxy_pac_mandatory) {
EXPECT_FALSE(dict.GetPacMandatory(&b));
} else {
ASSERT_TRUE(dict.GetPacMandatory(&b));
EXPECT_EQ(*expected_proxy_pac_mandatory, b);
}
if (expected_proxy_bypass_list.empty()) {
EXPECT_FALSE(dict.GetBypassList(&s));
} else {
ASSERT_TRUE(dict.GetBypassList(&s));
EXPECT_EQ(expected_proxy_bypass_list, s);
}
ProxyPrefs::ProxyMode mode;
ASSERT_TRUE(dict.GetMode(&mode));
EXPECT_EQ(expected_proxy_mode, mode);
}
} // namespace
IN_PROC_BROWSER_TEST_F(PolicyTest, SeparateProxyPoliciesMerging) {
// Add an individual proxy policy value.
PolicyMap policies;
policies.Set(key::kProxyServerMode, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
POLICY_SOURCE_CLOUD, base::Value(3), nullptr);
UpdateProviderPolicy(policies);
VerifyProxyPrefs(g_browser_process->local_state(), std::string(),
std::string(), std::nullopt, std::string(),
ProxyPrefs::MODE_SYSTEM);
VerifyProxyPrefs(chrome_test_utils::GetProfile(this)->GetPrefs(),
std::string(), std::string(), std::nullopt, std::string(),
ProxyPrefs::MODE_SYSTEM);
}
} // namespace policy