Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(818)

Unified Diff: chromeos/network/prohibited_technologies_handler.cc

Issue 1431563005: Handle prohibited technologies in device policy ONC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/network/prohibited_technologies_handler.cc
diff --git a/chromeos/network/prohibited_technologies_handler.cc b/chromeos/network/prohibited_technologies_handler.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5d41e31264e163e9a23092a0034b413c6f778c33
--- /dev/null
+++ b/chromeos/network/prohibited_technologies_handler.cc
@@ -0,0 +1,112 @@
+// Copyright 2014 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 "chromeos/network/prohibited_technologies_handler.h"
+
+#include "chromeos/network/managed_network_configuration_handler.h"
+#include "chromeos/network/network_state_handler.h"
+#include "chromeos/network/network_util.h"
+#include "third_party/cros_system_api/dbus/service_constants.h"
+
+namespace chromeos {
+
+ProhibitedTechnologiesHandler::ProhibitedTechnologiesHandler() {}
+
+ProhibitedTechnologiesHandler::~ProhibitedTechnologiesHandler() {
+ if (managed_network_configuration_handler_)
+ managed_network_configuration_handler_->RemoveObserver(this);
+ if (LoginState::IsInitialized())
+ LoginState::Get()->RemoveObserver(this);
+}
+
+void ProhibitedTechnologiesHandler::Init(
+ ManagedNetworkConfigurationHandler* managed_network_configuration_handler,
+ NetworkStateHandler* network_state_handler) {
+ if (LoginState::IsInitialized())
+ LoginState::Get()->AddObserver(this);
+
+ managed_network_configuration_handler_ =
+ managed_network_configuration_handler;
+ if (managed_network_configuration_handler_)
+ managed_network_configuration_handler_->AddObserver(this);
+ network_state_handler_ = network_state_handler;
+
+ // Clear the list of prohibited network technologies. As a user logout always
+ // triggers a browser process restart, Init() is always invoked to reallow any
+ // network technology forbidden for the previous user.
+ network_state_handler_->SetProhibitedTechnologies(
+ std::vector<std::string>(), chromeos::network_handler::ErrorCallback());
+
+ if (LoginState::IsInitialized())
+ LoggedInStateChanged();
+}
+
+void ProhibitedTechnologiesHandler::LoggedInStateChanged() {
+ user_logged_in_ = LoginState::Get()->IsUserLoggedIn();
+ EnforceProhibitedTechnologies();
+}
+
+void ProhibitedTechnologiesHandler::PoliciesChanged(
+ const std::string& userhash) {}
+
+void ProhibitedTechnologiesHandler::PoliciesApplied(
+ const std::string& userhash) {
+ if (userhash.empty())
+ return;
+ user_policy_applied_ = true;
+ EnforceProhibitedTechnologies();
+}
+
+void ProhibitedTechnologiesHandler::SetProhibitedTechnologies(
+ const base::ListValue* prohibited_list) {
+ // Build up prohibited network type list and save it for furthur use when
+ // enforced
+ prohibited_technologies_.clear();
+ for (const base::Value* item : *prohibited_list) {
+ std::string prohibited_technology;
+ item->GetAsString(&prohibited_technology);
+ std::string translated_tech =
+ network_util::TranslateONCTypeToShill(prohibited_technology);
+ if (!translated_tech.empty())
+ prohibited_technologies_.push_back(translated_tech);
+ }
+ EnforceProhibitedTechnologies();
+}
+
+void ProhibitedTechnologiesHandler::EnforceProhibitedTechnologies() {
+ if (user_logged_in_ && user_policy_applied_) {
+ network_state_handler_->SetProhibitedTechnologies(
+ prohibited_technologies_, network_handler::ErrorCallback());
+ if (std::find(prohibited_technologies_.begin(),
+ prohibited_technologies_.end(),
+ shill::kTypeEthernet) != prohibited_technologies_.end())
+ return;
+ } else {
+ // This is done to make sure prohibited technologies are cleared
+ // before user policy is applied.
+ network_state_handler_->SetProhibitedTechnologies(
+ std::vector<std::string>(), network_handler::ErrorCallback());
+ }
+
+ // Enable ethernet back as user doesn't have a place to enable it back
+ // if user shuts down directly in a user session. As shill will persist
+ // ProhibitedTechnologies which may include ethernet, making users can
+ // not find Ethernet at next boot or logging out unless user log out first
+ // and then shutdown.
+ if (network_state_handler_->IsTechnologyAvailable(
+ NetworkTypePattern::Ethernet()) &&
+ !network_state_handler_->IsTechnologyEnabled(
+ NetworkTypePattern::Ethernet()))
+ network_state_handler_->SetTechnologyEnabled(
+ NetworkTypePattern::Ethernet(), true, network_handler::ErrorCallback());
+}
+
+std::vector<std::string>
+ProhibitedTechnologiesHandler::GetCurrentlyProhibitedTechnologies() {
+ if (user_logged_in_ && user_policy_applied_)
+ return prohibited_technologies_;
+ return std::vector<std::string>();
+}
+
+} // namespace chromeos
« no previous file with comments | « chromeos/network/prohibited_technologies_handler.h ('k') | chromeos/network/prohibited_technologies_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698