Chromium Code Reviews| 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 |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cf4a6f255ca1a1fafbc66fbc22f073e3a7fdad03 |
| --- /dev/null |
| +++ b/components/arc/net/arc_net_host_impl.cc |
| @@ -0,0 +1,97 @@ |
| +// Copyright 2015 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 "components/arc/net/arc_net_host_impl.h" |
| + |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/logging.h" |
| +#include "base/posix/eintr_wrapper.h" |
| +#include "base/thread_task_runner_handle.h" |
| +#include "base/time/time.h" |
| +#include "chromeos/network/network_util.h" |
| +#include "chromeos/network/onc/onc_utils.h" |
| +#include "components/arc/arc_bridge_service.h" |
| +#include "components/onc/onc_constants.h" |
| +#include "third_party/mojo/src/mojo/edk/embedder/embedder.h" |
| + |
| +namespace { |
| + |
| +const int kGetNetworksListLimit = 100; |
| + |
| +} // namespace |
| + |
| +namespace arc { |
| + |
| +ArcNetHostImpl::ArcNetHostImpl(ArcBridgeService* arc_bridge_service) |
| + : arc_bridge_service_(arc_bridge_service), |
| + binding_(this), |
| + weak_factory_(this) { |
| + arc_bridge_service->AddObserver(this); |
| + if (arc_bridge_service->net_instance()) |
| + OnNetInstanceReady(); |
| +} |
| + |
| +ArcNetHostImpl::~ArcNetHostImpl() { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + arc_bridge_service_->RemoveObserver(this); |
| +} |
| + |
| +void ArcNetHostImpl::OnNetInstanceReady() { |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + |
| + NetHostPtr host; |
| + binding_.Bind(GetProxy(&host)); |
| + arc_bridge_service_->net_instance()->Init(std::move(host)); |
| +} |
| + |
| +void ArcNetHostImpl::GetNetworks(bool configured_only, |
| + bool visible_only, |
| + const GetNetworksCallback& callback) { |
| + NetworkDataPtr data = NetworkData::New(); |
| + data->status = NETWORK_RESULT_SUCCESS; |
| + |
| + // Retrieve list of nearby wifi networks |
| + chromeos::NetworkTypePattern network_pattern = |
| + chromeos::onc::NetworkTypePatternFromOncType(onc::network_type::kWiFi); |
| + scoped_ptr<base::ListValue> network_properties_list = |
| + chromeos::network_util::TranslateNetworkListToONC( |
| + network_pattern, configured_only, visible_only, |
| + kGetNetworksListLimit); |
| + |
| + // Extract info for each network and add it to the list. |
| + for (base::Value* value : *network_properties_list) { |
| + WifiConfigurationPtr wc = WifiConfiguration::New(); |
| + |
| + base::DictionaryValue* network_dict = nullptr; |
| + if (!value->GetAsDictionary(&network_dict)) { |
| + LOG(ERROR) << "Error parsing NetworkStateProperties"; |
| + continue; |
| + } |
| + |
| + std::string tmp; |
| + network_dict->GetString(onc::network_config::kName, &tmp); |
| + wc->ssid = tmp; |
| + |
| + base::DictionaryValue* wifi_dict = nullptr; |
| + if (!network_dict->GetDictionary(onc::network_config::kWiFi, &wifi_dict)) { |
| + LOG(ERROR) << "Error parsing NetworkStateProperties.WiFi"; |
| + continue; |
|
stevenjb
2016/01/14 18:18:54
DCHECK
cernekee
2016/01/14 21:22:23
Done.
|
| + } |
| + |
| + wifi_dict->GetInteger(onc::wifi::kFrequency, &wc->frequency); |
| + wifi_dict->GetInteger(onc::wifi::kSignalStrength, &wc->signal_strength); |
| + wifi_dict->GetString(onc::wifi::kSecurity, &tmp); |
| + wc->security = tmp; |
| + wifi_dict->GetString(onc::wifi::kBSSID, &tmp); |
| + wc->bssid = tmp; |
| + |
| + data->networks.push_back(std::move(wc)); |
| + } |
| + |
| + callback.Run(std::move(data)); |
| +} |
| + |
| +} // namespace arc |