blob: 5c075af3d06156140005b7fcff5d086f8c114644 [file] [log] [blame]
// Copyright 2016 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 <memory>
#include <string>
#include <utility>
#include "base/bind.h"
#include "base/callback.h"
#include "base/command_line.h"
#include "base/json/json_reader.h"
#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/values.h"
#include "chrome/browser/chromeos/arc/intent_helper/arc_settings_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/shill_profile_client.h"
#include "chromeos/dbus/shill_service_client.h"
#include "chromeos/network/network_handler.h"
#include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h"
#include "chromeos/network/proxy/proxy_config_handler.h"
#include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_service_manager.h"
#include "components/arc/arc_util.h"
#include "components/arc/test/fake_intent_helper_instance.h"
#include "components/policy/core/browser/browser_policy_connector.h"
#include "components/policy/core/common/mock_configuration_policy_provider.h"
#include "components/policy/core/common/policy_map.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 "testing/gtest/include/gtest/gtest.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
using testing::_;
using testing::Return;
namespace arc {
namespace {
constexpr char kONCPolicy[] =
"{ \"NetworkConfigurations\": ["
" { \"GUID\": \"stub_ethernet_guid\","
" \"Type\": \"Ethernet\","
" \"Name\": \"My Ethernet\","
" \"Ethernet\": {"
" \"Authentication\": \"None\" },"
" \"ProxySettings\": {"
" \"PAC\": \"http://domain.com/x\","
" \"Type\": \"PAC\" }"
" }"
" ],"
" \"Type\": \"UnencryptedConfiguration\""
"}";
constexpr char kDeviceONCPolicy[] =
"{"
" \"GlobalNetworkConfiguration\": {"
" \"AllowOnlyPolicyNetworksToAutoconnect\": false,"
" \"AllowOnlyPolicyNetworksToConnect\": false"
" },"
" \"NetworkConfigurations\": [ {"
" \"GUID\": \"{wifi1_guid}\","
" \"Name\": \"wifi1\","
" \"ProxySettings\": {"
" \"Manual\": {"
" \"FTPProxy\": {"
" \"Host\": \"proxy\","
" \"Port\": 5000"
" },"
" \"HTTPProxy\": {"
" \"Host\": \"proxy\","
" \"Port\": 5000"
" },"
" \"SOCKS\": {"
" \"Host\": \"proxy\","
" \"Port\": 5000"
" },"
" \"SecureHTTPProxy\": {"
" \"Host\": \"proxy\","
" \"Port\": 5000"
" }"
" },"
" \"Type\": \"Manual\""
" },"
" \"Type\": \"WiFi\","
" \"WiFi\": {"
" \"AutoConnect\": false,"
" \"HiddenSSID\": false,"
" \"SSID\": \"wifi1\","
" \"Security\": \"None\""
" }"
" } ]"
"}";
constexpr char kUserONCPolicy[] =
"{"
" \"NetworkConfigurations\": [ {"
" \"GUID\": \"{direct_guid}\","
" \"Name\": \"EAP-TTLS\","
" \"ProxySettings\": {"
" \"Type\": \"Direct\""
" },"
" \"Type\": \"WiFi\","
" \"WiFi\": {"
" \"AutoConnect\": false,"
" \"EAP\": {"
" \"Identity\": \"CrOS\","
" \"Inner\": \"Automatic\","
" \"Outer\": \"EAP-TTLS\","
" \"Password\": \"********\","
" \"Recommended\": ["
" \"AnonymousIdentity\","
" \"Identity\","
" \"Password\""
" ],"
" \"SaveCredentials\": true,"
" \"UseSystemCAs\": false"
" },"
" \"HiddenSSID\": false,"
" \"SSID\": \"direct_ssid\","
" \"Security\": \"WPA-EAP\""
" }"
" }, {"
" \"GUID\": \"{wifi0_guid}\","
" \"Name\": \"wifi0\","
" \"ProxySettings\": {"
" \"Manual\": {"
" \"FTPProxy\": {"
" \"Host\": \"proxy-n300\","
" \"Port\": 3000"
" },"
" \"HTTPProxy\": {"
" \"Host\": \"proxy-n300\","
" \"Port\": 3000"
" },"
" \"SOCKS\": {"
" \"Host\": \"proxy-n300\","
" \"Port\": 3000"
" },"
" \"SecureHTTPProxy\": {"
" \"Host\": \"proxy-n300\","
" \"Port\": 3000"
" }"
" },"
" \"Type\": \"Manual\""
" },"
" \"Type\": \"WiFi\","
" \"WiFi\": {"
" \"AutoConnect\": false,"
" \"HiddenSSID\": false,"
" \"SSID\": \"wifi0\","
" \"Security\": \"None\""
" }"
" } ]"
"}";
constexpr char kUserProfilePath[] = "user_profile";
constexpr char kDefaultServicePath[] = "stub_ethernet";
constexpr char kWifi0ServicePath[] = "stub_wifi0";
constexpr char kWifi0Ssid[] = "wifi0";
constexpr char kWifi0Guid[] = "{wifi0_guid}";
constexpr char kWifi1ServicePath[] = "stub_wifi1";
constexpr char kWifi1Ssid[] = "wifi1";
constexpr char kWifi1Guid[] = "{wifi1_guid}";
constexpr char kONCPacUrl[] = "http://domain.com/x";
constexpr char kBackupBroadcastAction[] =
"org.chromium.arc.intent_helper.SET_BACKUP_ENABLED";
constexpr char kLocationServiceBroadcastAction[] =
"org.chromium.arc.intent_helper.SET_LOCATION_SERVICE_ENABLED";
constexpr char kSetProxyBroadcastAction[] =
"org.chromium.arc.intent_helper.SET_PROXY";
// Returns the number of |broadcasts| having the |action| action, and checks
// that all their extras match with |extras|.
int CountBroadcasts(
const std::vector<FakeIntentHelperInstance::Broadcast>& broadcasts,
const std::string& action,
const base::DictionaryValue* extras) {
int count = 0;
for (const FakeIntentHelperInstance::Broadcast& broadcast : broadcasts) {
if (broadcast.action == action) {
EXPECT_TRUE(base::JSONReader::Read(broadcast.extras)->Equals(extras));
count++;
}
}
return count;
}
// Returns the number of |broadcasts| having the proxy action, and checks that
// all their extras match with |extras|.
int CountProxyBroadcasts(
const std::vector<FakeIntentHelperInstance::Broadcast>& broadcasts,
const base::DictionaryValue* proxy_settings) {
return CountBroadcasts(broadcasts, kSetProxyBroadcastAction, proxy_settings);
}
void RunUntilIdle() {
DCHECK(base::MessageLoop::current());
base::RunLoop loop;
loop.RunUntilIdle();
}
} // namespace
class ArcSettingsServiceTest : public InProcessBrowserTest {
public:
ArcSettingsServiceTest() = default;
// InProcessBrowserTest:
~ArcSettingsServiceTest() override = default;
void SetUpCommandLine(base::CommandLine* command_line) override {
arc::SetArcAvailableCommandLineForTesting(command_line);
}
void SetUpInProcessBrowserTestFixture() override {
EXPECT_CALL(provider_, IsInitializationComplete(_))
.WillRepeatedly(Return(true));
policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
fake_intent_helper_instance_.reset(new FakeIntentHelperInstance());
}
void SetUpOnMainThread() override {
SetupNetworkEnvironment();
RunUntilIdle();
ArcServiceManager::Get()
->arc_bridge_service()
->intent_helper()
->SetInstance(fake_intent_helper_instance_.get());
}
void TearDownOnMainThread() override {
ArcServiceManager::Get()
->arc_bridge_service()
->intent_helper()
->SetInstance(nullptr);
}
void UpdatePolicy(const policy::PolicyMap& policy) {
provider_.UpdateChromePolicy(policy);
RunUntilIdle();
}
protected:
void DisconnectNetworkService(const std::string& service_path) {
chromeos::ShillServiceClient::TestInterface* service_test =
chromeos::DBusThreadManager::Get()
->GetShillServiceClient()
->GetTestInterface();
base::Value value(shill::kStateIdle);
service_test->SetServiceProperty(service_path, shill::kStateProperty,
value);
RunUntilIdle();
}
void ConnectWifiNetworkService(const std::string& service_path,
const std::string& guid,
const std::string& ssid) {
chromeos::ShillServiceClient::TestInterface* service_test =
chromeos::DBusThreadManager::Get()
->GetShillServiceClient()
->GetTestInterface();
service_test->AddService(service_path, guid, ssid, shill::kTypeWifi,
shill::kStateOnline, true /* add_to_visible */);
service_test->SetServiceProperty(service_path, shill::kProfileProperty,
base::Value(kUserProfilePath));
RunUntilIdle();
}
void SetProxyConfigForNetworkService(
const std::string& service_path,
const base::DictionaryValue* proxy_config) {
ProxyConfigDictionary proxy_config_dict(proxy_config->CreateDeepCopy());
const chromeos::NetworkState* network = chromeos::NetworkHandler::Get()
->network_state_handler()
->GetNetworkState(service_path);
ASSERT_TRUE(network);
chromeos::proxy_config::SetProxyConfigForNetwork(proxy_config_dict,
*network);
}
std::unique_ptr<FakeIntentHelperInstance> fake_intent_helper_instance_;
private:
void SetupNetworkEnvironment() {
chromeos::ShillProfileClient::TestInterface* profile_test =
chromeos::DBusThreadManager::Get()
->GetShillProfileClient()
->GetTestInterface();
chromeos::ShillServiceClient::TestInterface* service_test =
chromeos::DBusThreadManager::Get()
->GetShillServiceClient()
->GetTestInterface();
profile_test->AddProfile(kUserProfilePath, "user");
service_test->ClearServices();
service_test->AddService(kDefaultServicePath, "stub_ethernet_guid", "eth0",
shill::kTypeEthernet, shill::kStateOnline,
true /* add_to_visible */);
service_test->SetServiceProperty(kDefaultServicePath,
shill::kProfileProperty,
base::Value(kUserProfilePath));
}
policy::MockConfigurationPolicyProvider provider_;
DISALLOW_COPY_AND_ASSIGN(ArcSettingsServiceTest);
};
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, BackupRestorePolicyTest) {
PrefService* const prefs = browser()->profile()->GetPrefs();
// Set the user pref as initially enabled.
prefs->SetBoolean(prefs::kArcBackupRestoreEnabled, true);
EXPECT_TRUE(prefs->GetBoolean(prefs::kArcBackupRestoreEnabled));
fake_intent_helper_instance_->clear_broadcasts();
// The policy is set to false.
policy::PolicyMap policy;
policy.Set(policy::key::kArcBackupRestoreEnabled,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(false),
nullptr);
UpdatePolicy(policy);
// The pref is disabled and managed, and the corresponding broadcast is sent
// at least once.
EXPECT_FALSE(prefs->GetBoolean(prefs::kArcBackupRestoreEnabled));
EXPECT_TRUE(prefs->IsManagedPreference(prefs::kArcBackupRestoreEnabled));
base::DictionaryValue expected_broadcast_extras;
expected_broadcast_extras.SetBoolean("enabled", false);
expected_broadcast_extras.SetBoolean("managed", true);
EXPECT_GE(CountBroadcasts(fake_intent_helper_instance_->broadcasts(),
kBackupBroadcastAction, &expected_broadcast_extras),
1);
fake_intent_helper_instance_->clear_broadcasts();
// The policy is set to true.
policy.Set(policy::key::kArcBackupRestoreEnabled,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(true),
nullptr);
UpdatePolicy(policy);
// The pref is enabled and managed, and the corresponding broadcast is sent at
// least once.
EXPECT_TRUE(prefs->GetBoolean(prefs::kArcBackupRestoreEnabled));
EXPECT_TRUE(prefs->IsManagedPreference(prefs::kArcBackupRestoreEnabled));
expected_broadcast_extras.SetBoolean("enabled", true);
EXPECT_GE(CountBroadcasts(fake_intent_helper_instance_->broadcasts(),
kBackupBroadcastAction, &expected_broadcast_extras),
1);
fake_intent_helper_instance_->clear_broadcasts();
// The policy is unset.
policy.Erase(policy::key::kArcBackupRestoreEnabled);
UpdatePolicy(policy);
// The pref is disabled and unmanaged, and the corresponding broadcast is
// sent.
EXPECT_FALSE(prefs->GetBoolean(prefs::kArcBackupRestoreEnabled));
EXPECT_FALSE(prefs->IsManagedPreference(prefs::kArcBackupRestoreEnabled));
expected_broadcast_extras.SetBoolean("enabled", false);
expected_broadcast_extras.SetBoolean("managed", false);
EXPECT_EQ(CountBroadcasts(fake_intent_helper_instance_->broadcasts(),
kBackupBroadcastAction, &expected_broadcast_extras),
1);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, LocationServicePolicyTest) {
PrefService* const prefs = browser()->profile()->GetPrefs();
// Set the user pref as initially enabled.
prefs->SetBoolean(prefs::kArcLocationServiceEnabled, true);
EXPECT_TRUE(prefs->GetBoolean(prefs::kArcLocationServiceEnabled));
fake_intent_helper_instance_->clear_broadcasts();
// The policy is set to false.
policy::PolicyMap policy;
policy.Set(policy::key::kArcLocationServiceEnabled,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(false),
nullptr);
UpdatePolicy(policy);
// The pref is disabled and managed, and the corresponding broadcast is sent
// at least once.
EXPECT_FALSE(prefs->GetBoolean(prefs::kArcLocationServiceEnabled));
EXPECT_TRUE(prefs->IsManagedPreference(prefs::kArcLocationServiceEnabled));
base::DictionaryValue expected_broadcast_extras;
expected_broadcast_extras.SetBoolean("enabled", false);
expected_broadcast_extras.SetBoolean("managed", true);
EXPECT_GE(CountBroadcasts(fake_intent_helper_instance_->broadcasts(),
kLocationServiceBroadcastAction,
&expected_broadcast_extras),
1);
fake_intent_helper_instance_->clear_broadcasts();
// The policy is set to true.
policy.Set(policy::key::kArcLocationServiceEnabled,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD, base::MakeUnique<base::Value>(true),
nullptr);
UpdatePolicy(policy);
// The pref is enabled and managed, and the corresponding broadcast is sent at
// least once.
EXPECT_TRUE(prefs->GetBoolean(prefs::kArcLocationServiceEnabled));
EXPECT_TRUE(prefs->IsManagedPreference(prefs::kArcLocationServiceEnabled));
expected_broadcast_extras.SetBoolean("enabled", true);
EXPECT_GE(CountBroadcasts(fake_intent_helper_instance_->broadcasts(),
kLocationServiceBroadcastAction,
&expected_broadcast_extras),
1);
fake_intent_helper_instance_->clear_broadcasts();
// The policy is unset.
policy.Erase(policy::key::kArcLocationServiceEnabled);
UpdatePolicy(policy);
// The pref is disabled and unmanaged, and the corresponding broadcast is
// sent.
EXPECT_FALSE(prefs->GetBoolean(prefs::kArcLocationServiceEnabled));
EXPECT_FALSE(prefs->IsManagedPreference(prefs::kArcLocationServiceEnabled));
expected_broadcast_extras.SetBoolean("enabled", false);
expected_broadcast_extras.SetBoolean("managed", false);
EXPECT_EQ(CountBroadcasts(fake_intent_helper_instance_->broadcasts(),
kLocationServiceBroadcastAction,
&expected_broadcast_extras),
1);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, ProxyModePolicyTest) {
fake_intent_helper_instance_->clear_broadcasts();
policy::PolicyMap policy;
policy.Set(
policy::key::kProxyMode, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::MakeUnique<base::Value>(ProxyPrefs::kAutoDetectProxyModeName),
nullptr);
UpdatePolicy(policy);
std::unique_ptr<base::DictionaryValue> expected_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_proxy_config->SetString("mode",
ProxyPrefs::kAutoDetectProxyModeName);
expected_proxy_config->SetString("pacUrl", "http://wpad/wpad.dat");
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_proxy_config.get()),
1);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, ONCProxyPolicyTest) {
fake_intent_helper_instance_->clear_broadcasts();
policy::PolicyMap policy;
policy.Set(policy::key::kOpenNetworkConfiguration,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD,
base::MakeUnique<base::Value>(kONCPolicy), nullptr);
UpdatePolicy(policy);
std::unique_ptr<base::DictionaryValue> expected_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_proxy_config->SetString("mode", ProxyPrefs::kPacScriptProxyModeName);
expected_proxy_config->SetString("pacUrl", kONCPacUrl);
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_proxy_config.get()),
1);
}
// Proxy policy has a higher priority than proxy default settings.
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, TwoSourcesTest) {
fake_intent_helper_instance_->clear_broadcasts();
policy::PolicyMap policy;
// Proxy policy.
policy.Set(
policy::key::kProxyMode, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::MakeUnique<base::Value>(ProxyPrefs::kFixedServersProxyModeName),
nullptr);
policy.Set(policy::key::kProxyServer, policy::POLICY_LEVEL_MANDATORY,
policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
base::MakeUnique<base::Value>("proxy:8888"), nullptr);
UpdatePolicy(policy);
std::unique_ptr<base::DictionaryValue> proxy_config(
base::MakeUnique<base::DictionaryValue>());
proxy_config->SetString("mode", ProxyPrefs::kAutoDetectProxyModeName);
ProxyConfigDictionary proxy_config_dict(std::move(proxy_config));
const chromeos::NetworkState* network = chromeos::NetworkHandler::Get()
->network_state_handler()
->DefaultNetwork();
ASSERT_TRUE(network);
chromeos::proxy_config::SetProxyConfigForNetwork(proxy_config_dict, *network);
RunUntilIdle();
std::unique_ptr<base::DictionaryValue> expected_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_proxy_config->SetString("mode",
ProxyPrefs::kFixedServersProxyModeName);
expected_proxy_config->SetString("host", "proxy");
expected_proxy_config->SetInteger("port", 8888);
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_proxy_config.get()),
1);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, ProxyPrefTest) {
fake_intent_helper_instance_->clear_broadcasts();
std::unique_ptr<base::DictionaryValue> proxy_config(
base::MakeUnique<base::DictionaryValue>());
proxy_config->SetString("mode", ProxyPrefs::kPacScriptProxyModeName);
proxy_config->SetString("pac_url", "http://proxy");
browser()->profile()->GetPrefs()->Set(proxy_config::prefs::kProxy,
*proxy_config.get());
RunUntilIdle();
std::unique_ptr<base::DictionaryValue> expected_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_proxy_config->SetString("mode", ProxyPrefs::kPacScriptProxyModeName);
expected_proxy_config->SetString("pacUrl", "http://proxy");
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_proxy_config.get()),
1);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, DefaultNetworkProxyConfigTest) {
fake_intent_helper_instance_->clear_broadcasts();
std::unique_ptr<base::DictionaryValue> proxy_config(
base::MakeUnique<base::DictionaryValue>());
proxy_config->SetString("mode", ProxyPrefs::kFixedServersProxyModeName);
proxy_config->SetString("server", "proxy:8080");
SetProxyConfigForNetworkService(kDefaultServicePath, proxy_config.get());
RunUntilIdle();
std::unique_ptr<base::DictionaryValue> expected_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_proxy_config->SetString("mode",
ProxyPrefs::kFixedServersProxyModeName);
expected_proxy_config->SetString("host", "proxy");
expected_proxy_config->SetInteger("port", 8080);
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_proxy_config.get()),
1);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, DefaultNetworkDisconnectedTest) {
ConnectWifiNetworkService(kWifi0ServicePath, kWifi0Guid, kWifi0Ssid);
fake_intent_helper_instance_->clear_broadcasts();
// Set proxy confog for default network.
std::unique_ptr<base::DictionaryValue> default_proxy_config(
base::MakeUnique<base::DictionaryValue>());
default_proxy_config->SetString("mode",
ProxyPrefs::kFixedServersProxyModeName);
default_proxy_config->SetString("server", "default/proxy:8080");
SetProxyConfigForNetworkService(kDefaultServicePath,
default_proxy_config.get());
RunUntilIdle();
// Set proxy confog for WI-FI network.
std::unique_ptr<base::DictionaryValue> wifi_proxy_config(
base::MakeUnique<base::DictionaryValue>());
wifi_proxy_config->SetString("mode", ProxyPrefs::kFixedServersProxyModeName);
wifi_proxy_config->SetString("server", "wifi/proxy:8080");
SetProxyConfigForNetworkService(kWifi0ServicePath, wifi_proxy_config.get());
RunUntilIdle();
// Observe default network proxy config broadcast.
std::unique_ptr<base::DictionaryValue> expected_default_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_default_proxy_config->SetString(
"mode", ProxyPrefs::kFixedServersProxyModeName);
expected_default_proxy_config->SetString("host", "default/proxy");
expected_default_proxy_config->SetInteger("port", 8080);
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_default_proxy_config.get()),
1);
// Disconnect default network.
fake_intent_helper_instance_->clear_broadcasts();
DisconnectNetworkService(kDefaultServicePath);
// Observe WI-FI network proxy config broadcast.
std::unique_ptr<base::DictionaryValue> expected_wifi_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_wifi_proxy_config->SetString("mode",
ProxyPrefs::kFixedServersProxyModeName);
expected_wifi_proxy_config->SetString("host", "wifi/proxy");
expected_wifi_proxy_config->SetInteger("port", 8080);
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_wifi_proxy_config.get()),
1);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, NoNetworkConnectedTest) {
// Disconnect all networks.
fake_intent_helper_instance_->clear_broadcasts();
DisconnectNetworkService(kDefaultServicePath);
EXPECT_EQ(
CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(), nullptr),
0);
}
IN_PROC_BROWSER_TEST_F(ArcSettingsServiceTest, TwoONCProxyPolicyTest) {
// Connect to wifi1 with appliead device ONC policy.
ConnectWifiNetworkService(kWifi1ServicePath, kWifi1Guid, kWifi1Ssid);
// Disconnect default network.
DisconnectNetworkService(kDefaultServicePath);
fake_intent_helper_instance_->clear_broadcasts();
policy::PolicyMap policy;
policy.Set(policy::key::kOpenNetworkConfiguration,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
policy::POLICY_SOURCE_CLOUD,
base::MakeUnique<base::Value>(kUserONCPolicy), nullptr);
policy.Set(policy::key::kDeviceOpenNetworkConfiguration,
policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_MACHINE,
policy::POLICY_SOURCE_CLOUD,
base::MakeUnique<base::Value>(kDeviceONCPolicy), nullptr);
UpdatePolicy(policy);
std::unique_ptr<base::DictionaryValue> expected_proxy_config(
base::MakeUnique<base::DictionaryValue>());
expected_proxy_config->SetString("mode",
ProxyPrefs::kFixedServersProxyModeName);
expected_proxy_config->SetString("host", "proxy");
expected_proxy_config->SetInteger("port", 5000);
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_proxy_config.get()),
1);
DisconnectNetworkService(kWifi1ServicePath);
fake_intent_helper_instance_->clear_broadcasts();
// Connect to wifi0 with appliead user ONC policy.
ConnectWifiNetworkService(kWifi0ServicePath, kWifi0Guid, kWifi0Ssid);
expected_proxy_config->SetString("mode",
ProxyPrefs::kFixedServersProxyModeName);
expected_proxy_config->SetString("host", "proxy-n300");
expected_proxy_config->SetInteger("port", 3000);
EXPECT_EQ(CountProxyBroadcasts(fake_intent_helper_instance_->broadcasts(),
expected_proxy_config.get()),
1);
}
} // namespace arc