blob: 66a426cc777e55565c151247f0d942bf168befe4 [file] [log] [blame]
fqjfee5067a2015-11-13 20:12:591// Copyright 2015 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 "chromeos/network/prohibited_technologies_handler.h"
6
dcheng0a6e80c2016-04-08 18:37:387#include <memory>
fqjfee5067a2015-11-13 20:12:598#include <string>
dcheng7df85ba2015-12-31 04:56:399#include <utility>
fqjfee5067a2015-11-13 20:12:5910
11#include "base/bind.h"
12#include "base/callback.h"
13#include "base/json/json_reader.h"
avi6e1a22d2015-12-21 03:43:2014#include "base/macros.h"
fqjfee5067a2015-11-13 20:12:5915#include "base/run_loop.h"
fdoray822e6b22017-04-27 20:47:0316#include "base/test/scoped_task_environment.h"
fqjfee5067a2015-11-13 20:12:5917#include "chromeos/network/managed_network_configuration_handler_impl.h"
18#include "chromeos/network/network_configuration_handler.h"
19#include "chromeos/network/network_profile_handler.h"
Steven Bennettsf13e1e42019-05-15 00:26:3120#include "chromeos/network/network_state_handler.h"
Steven Bennetts200d0612019-02-08 02:17:1221#include "chromeos/network/network_state_test_helper.h"
fqjfee5067a2015-11-13 20:12:5922#include "chromeos/network/onc/onc_utils.h"
23#include "testing/gtest/include/gtest/gtest.h"
24#include "third_party/cros_system_api/dbus/service_constants.h"
25
26namespace chromeos {
27
Steven Bennetts200d0612019-02-08 02:17:1228class ProhibitedTechnologiesHandlerTest : public testing::Test {
fqjfee5067a2015-11-13 20:12:5929 public:
fdoray822e6b22017-04-27 20:47:0330 ProhibitedTechnologiesHandlerTest()
Gabriel Charette694c3c332019-08-19 14:53:0531 : task_environment_(base::test::TaskEnvironment::MainThreadType::UI) {}
fqjfee5067a2015-11-13 20:12:5932
33 void SetUp() override {
fqjfee5067a2015-11-13 20:12:5934 LoginState::Initialize();
fqjfee5067a2015-11-13 20:12:5935
Steven Bennetts200d0612019-02-08 02:17:1236 helper_.manager_test()->AddTechnology(shill::kTypeCellular,
37 true /* enabled */);
stevenjb888a70ed2017-03-29 22:17:1738
fqjfee5067a2015-11-13 20:12:5939 network_config_handler_.reset(
40 NetworkConfigurationHandler::InitializeForTest(
Steven Bennetts200d0612019-02-08 02:17:1241 helper_.network_state_handler(),
42 nullptr /* network_device_handler */));
fqjfee5067a2015-11-13 20:12:5943
44 network_profile_handler_.reset(new NetworkProfileHandler());
45 network_profile_handler_->Init();
46
47 managed_config_handler_.reset(new ManagedNetworkConfigurationHandlerImpl());
48 prohibited_technologies_handler_.reset(new ProhibitedTechnologiesHandler());
49
50 managed_config_handler_->Init(
Steven Bennetts200d0612019-02-08 02:17:1251 helper_.network_state_handler(), network_profile_handler_.get(),
fqjfee5067a2015-11-13 20:12:5952 network_config_handler_.get(), nullptr /* network_device_handler */,
53 prohibited_technologies_handler_.get());
54
55 prohibited_technologies_handler_->Init(managed_config_handler_.get(),
Steven Bennetts200d0612019-02-08 02:17:1256 helper_.network_state_handler());
fqjfee5067a2015-11-13 20:12:5957
58 base::RunLoop().RunUntilIdle();
59
60 PreparePolicies();
61 }
62
63 void PreparePolicies() {
dcheng0a6e80c2016-04-08 18:37:3864 std::unique_ptr<base::ListValue> val(new base::ListValue());
fqjfee5067a2015-11-13 20:12:5965 val->AppendString("WiFi");
dcheng7df85ba2015-12-31 04:56:3966 global_config_disable_wifi.Set("DisableNetworkTypes", std::move(val));
fqjfee5067a2015-11-13 20:12:5967 val.reset(new base::ListValue());
68 val->AppendString("WiFi");
69 val->AppendString("Cellular");
dcheng7df85ba2015-12-31 04:56:3970 global_config_disable_wifi_and_cell.Set("DisableNetworkTypes",
71 std::move(val));
fqjfee5067a2015-11-13 20:12:5972 }
73
74 void TearDown() override {
75 prohibited_technologies_handler_.reset();
76 managed_config_handler_.reset();
77 network_profile_handler_.reset();
78 network_config_handler_.reset();
fqjfee5067a2015-11-13 20:12:5979 LoginState::Shutdown();
fqjfee5067a2015-11-13 20:12:5980 }
81
82 protected:
83 void LoginToRegularUser() {
84 LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE,
85 LoginState::LOGGED_IN_USER_REGULAR);
86 base::RunLoop().RunUntilIdle();
87 }
88
89 void SetupPolicy(const base::DictionaryValue& global_config,
90 bool user_policy) {
91 if (user_policy) {
92 managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_USER_POLICY,
Steven Bennetts200d0612019-02-08 02:17:1293 helper_.UserHash(), base::ListValue(),
fqjfee5067a2015-11-13 20:12:5994 global_config);
95 } else {
96 managed_config_handler_->SetPolicy(::onc::ONC_SOURCE_DEVICE_POLICY,
97 std::string(), // no username hash
98 base::ListValue(), global_config);
99 }
100 base::RunLoop().RunUntilIdle();
101 }
102
Steven Bennetts200d0612019-02-08 02:17:12103 NetworkStateHandler* network_state_handler() {
104 return helper_.network_state_handler();
105 }
106
107 base::DictionaryValue global_config_disable_wifi;
108 base::DictionaryValue global_config_disable_wifi_and_cell;
Anatoliy Potapchuk7912da42019-03-14 14:25:23109 std::unique_ptr<ProhibitedTechnologiesHandler>
110 prohibited_technologies_handler_;
Steven Bennetts200d0612019-02-08 02:17:12111
112 private:
Gabriel Charette694c3c332019-08-19 14:53:05113 base::test::TaskEnvironment task_environment_;
Steven Bennetts200d0612019-02-08 02:17:12114 NetworkStateTestHelper helper_{false /* use_default_devices_and_services */};
Anatoliy Potapchuk7912da42019-03-14 14:25:23115
dcheng0a6e80c2016-04-08 18:37:38116 std::unique_ptr<NetworkConfigurationHandler> network_config_handler_;
117 std::unique_ptr<ManagedNetworkConfigurationHandlerImpl>
118 managed_config_handler_;
119 std::unique_ptr<NetworkProfileHandler> network_profile_handler_;
fqjfee5067a2015-11-13 20:12:59120
fqjfee5067a2015-11-13 20:12:59121 DISALLOW_COPY_AND_ASSIGN(ProhibitedTechnologiesHandlerTest);
122};
123
124TEST_F(ProhibitedTechnologiesHandlerTest,
125 ProhibitedTechnologiesAllowedLoginScreen) {
126 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17127 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
128 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59129 NetworkTypePattern::Cellular()));
130 SetupPolicy(global_config_disable_wifi_and_cell, false);
131 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17132 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
133 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59134 NetworkTypePattern::Cellular()));
fdorayf5b47fd12016-09-13 14:12:36135}
fqjfee5067a2015-11-13 20:12:59136
137TEST_F(ProhibitedTechnologiesHandlerTest,
138 ProhibitedTechnologiesNotAllowedUserSession) {
139 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17140 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
141 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59142 NetworkTypePattern::Cellular()));
143 SetupPolicy(global_config_disable_wifi_and_cell, false);
144
145 LoginToRegularUser();
146 EXPECT_TRUE(
stevenjb888a70ed2017-03-29 22:17:17147 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
148 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59149 NetworkTypePattern::Cellular()));
150
151 SetupPolicy(base::DictionaryValue(), true); // wait for user policy
152
153 // Should be disabled after logged in
154 EXPECT_FALSE(
stevenjb888a70ed2017-03-29 22:17:17155 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
156 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59157 NetworkTypePattern::Cellular()));
158
159 // Can not enable it back
stevenjb888a70ed2017-03-29 22:17:17160 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59161 NetworkTypePattern::WiFi(), true, network_handler::ErrorCallback());
stevenjb888a70ed2017-03-29 22:17:17162 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59163 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
fdorayf5b47fd12016-09-13 14:12:36164 base::RunLoop().RunUntilIdle();
fqjfee5067a2015-11-13 20:12:59165 EXPECT_FALSE(
stevenjb888a70ed2017-03-29 22:17:17166 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
167 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59168 NetworkTypePattern::Cellular()));
169
170 // Can enable Cellular back after modifying policy
171 SetupPolicy(global_config_disable_wifi, false);
stevenjb888a70ed2017-03-29 22:17:17172 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59173 NetworkTypePattern::WiFi(), true, network_handler::ErrorCallback());
stevenjb888a70ed2017-03-29 22:17:17174 network_state_handler()->SetTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59175 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
fdorayf5b47fd12016-09-13 14:12:36176 base::RunLoop().RunUntilIdle();
fqjfee5067a2015-11-13 20:12:59177 EXPECT_FALSE(
stevenjb888a70ed2017-03-29 22:17:17178 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
179 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
fqjfee5067a2015-11-13 20:12:59180 NetworkTypePattern::Cellular()));
fdorayf5b47fd12016-09-13 14:12:36181}
fqjfee5067a2015-11-13 20:12:59182
Anatoliy Potapchuk7912da42019-03-14 14:25:23183TEST_F(ProhibitedTechnologiesHandlerTest,
184 IsGloballyProhibitedTechnologyWorksAfterReenabling) {
185 LoginToRegularUser();
186 SetupPolicy(base::DictionaryValue(), true); // wait for user policy
187
188 EXPECT_TRUE(
189 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
190 prohibited_technologies_handler_->AddGloballyProhibitedTechnology(
191 shill::kTypeWifi);
192 EXPECT_FALSE(
193 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
194
195 // Enabling it back
196 prohibited_technologies_handler_->RemoveGloballyProhibitedTechnology(
197 shill::kTypeWifi);
198 network_state_handler()->SetTechnologyEnabled(
199 NetworkTypePattern::WiFi(), true, network_handler::ErrorCallback());
200 base::RunLoop().RunUntilIdle();
201 EXPECT_TRUE(
202 network_state_handler()->IsTechnologyEnabled(NetworkTypePattern::WiFi()));
203}
204
205TEST_F(ProhibitedTechnologiesHandlerTest,
206 InteractionBetweenGloballyAndSessionsProhibitedTechnologies) {
207 // Set session prohibiting of Cellular, should not prohibit on login screen
208 SetupPolicy(global_config_disable_wifi_and_cell, false);
209 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
210 NetworkTypePattern::Cellular()));
211
212 LoginToRegularUser();
213 SetupPolicy(base::DictionaryValue(), true); // receive user policy
214 // Cellular should be prohibited
215 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
216 NetworkTypePattern::Cellular()));
217
218 // Should be prohibited after adding to globally prohibited list
219 prohibited_technologies_handler_->AddGloballyProhibitedTechnology(
220 shill::kTypeCellular);
221 network_state_handler()->SetTechnologyEnabled(
222 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
223 base::RunLoop().RunUntilIdle();
224 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
225 NetworkTypePattern::Cellular()));
226
227 // Should be prohibited after removing from globally prohibited list
228 prohibited_technologies_handler_->RemoveGloballyProhibitedTechnology(
229 shill::kTypeCellular);
230 network_state_handler()->SetTechnologyEnabled(
231 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
232 base::RunLoop().RunUntilIdle();
233 EXPECT_FALSE(network_state_handler()->IsTechnologyEnabled(
234 NetworkTypePattern::Cellular()));
235
236 // Should not be prohibited after updating session prohibited list.
237 SetupPolicy(global_config_disable_wifi, false);
238 network_state_handler()->SetTechnologyEnabled(
239 NetworkTypePattern::Cellular(), true, network_handler::ErrorCallback());
240 base::RunLoop().RunUntilIdle();
241 EXPECT_TRUE(network_state_handler()->IsTechnologyEnabled(
242 NetworkTypePattern::Cellular()));
243}
244
fqjfee5067a2015-11-13 20:12:59245} // namespace chromeos