Index: components/arc/net/arc_net_host_impl.cc |
diff --git a/components/arc/net/arc_net_host_impl.cc b/components/arc/net/arc_net_host_impl.cc |
index 929b64e89c10e1c20ed1ed1b3ac67e869bd6176f..afaec21d25b077b0468414179e2cd78428405ccf 100644 |
--- a/components/arc/net/arc_net_host_impl.cc |
+++ b/components/arc/net/arc_net_host_impl.cc |
@@ -14,6 +14,7 @@ |
#include "base/time/time.h" |
#include "chromeos/network/network_handler.h" |
#include "chromeos/network/network_state_handler.h" |
+#include "chromeos/network/network_type_pattern.h" |
#include "chromeos/network/network_util.h" |
#include "chromeos/network/onc/onc_utils.h" |
#include "components/arc/arc_bridge_service.h" |
@@ -145,10 +146,30 @@ void ArcNetHostImpl::GetWifiEnabledState( |
const GetWifiEnabledStateCallback& callback) { |
bool is_enabled = GetStateHandler()->IsTechnologyEnabled( |
chromeos::NetworkTypePattern::WiFi()); |
- |
callback.Run(is_enabled); |
} |
+void ArcNetHostImpl::SetWifiEnabledState( |
+ bool is_enabled, |
+ const SetWifiEnabledStateCallback& callback) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ chromeos::NetworkStateHandler::TechnologyState state = |
+ GetStateHandler()->GetTechnologyState( |
+ chromeos::NetworkTypePattern::WiFi()); |
+ // WiFi can't be enabled or disabled in these states. |
+ if ((state == chromeos::NetworkStateHandler::TECHNOLOGY_PROHIBITED) || |
+ (state == chromeos::NetworkStateHandler::TECHNOLOGY_UNINITIALIZED) || |
+ (state == chromeos::NetworkStateHandler::TECHNOLOGY_UNAVAILABLE)) { |
+ VLOG(1) << "SetWifiEnabledState failed due to WiFi state: " << state; |
+ callback.Run(false); |
+ } else { |
+ GetStateHandler()->SetTechnologyEnabled( |
+ chromeos::NetworkTypePattern::WiFi(), is_enabled, |
+ chromeos::network_handler::ErrorCallback()); |
+ callback.Run(true); |
+ } |
+} |
+ |
void ArcNetHostImpl::StartScan() { |
GetStateHandler()->RequestScan(); |
} |