| // 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 "chrome/browser/local_discovery/wifi/bootstrapping_network_switcher.h" |
| |
| #include "base/bind.h" |
| #include "components/onc/onc_constants.h" |
| |
| namespace local_discovery { |
| |
| namespace wifi { |
| |
| BootstrappingNetworkSwitcher::BootstrappingNetworkSwitcher( |
| WifiManager* wifi_manager, |
| const std::string& connect_ssid, |
| const SuccessCallback& callback) |
| : wifi_manager_(wifi_manager), |
| connect_ssid_(connect_ssid), |
| callback_(callback), |
| connected_(false), |
| weak_factory_(this) { |
| } |
| |
| BootstrappingNetworkSwitcher::~BootstrappingNetworkSwitcher() { |
| Disconnect(); |
| } |
| |
| void BootstrappingNetworkSwitcher::Connect() { |
| wifi_manager_->GetSSIDList( |
| base::Bind(&BootstrappingNetworkSwitcher::OnGotNetworkList, |
| weak_factory_.GetWeakPtr())); |
| } |
| |
| void BootstrappingNetworkSwitcher::Disconnect() { |
| if (connected_ && !return_guid_.empty()) { |
| connected_ = false; |
| wifi_manager_->ConnectToNetworkByID(return_guid_, |
| WifiManager::SuccessCallback()); |
| } |
| } |
| |
| void BootstrappingNetworkSwitcher::OnGotNetworkList( |
| const NetworkPropertiesList& networks) { |
| for (NetworkPropertiesList::const_iterator i = networks.begin(); |
| i != networks.end(); |
| i++) { |
| if (i->connection_state == onc::connection_state::kConnected) { |
| return_guid_ = i->guid; |
| break; |
| } |
| } |
| |
| // We are "connected" while attempting to connect even if we fail |
| connected_ = true; |
| |
| // Bootstrapping devices should have an empty PSK. |
| wifi_manager_->ConfigureAndConnectNetwork( |
| connect_ssid_, |
| WifiCredentials::FromPSK(std::string()), |
| base::Bind(&BootstrappingNetworkSwitcher::OnConnectStatus, |
| weak_factory_.GetWeakPtr())); |
| } |
| |
| void BootstrappingNetworkSwitcher::OnConnectStatus(bool status) { |
| connected_ = status; |
| callback_.Run(status); |
| } |
| |
| } // namespace wifi |
| |
| } // namespace local_discovery |