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..06a2531e3f95420b272fa25131a265595442e157 |
--- /dev/null |
+++ b/components/arc/net/arc_net_host_impl.cc |
@@ -0,0 +1,91 @@ |
+// 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 "third_party/mojo/src/mojo/edk/embedder/embedder.h" |
+ |
+namespace { |
+ |
+const int kGetNetworksListLimit = 100; |
+ |
+} // namespace |
+ |
+namespace arc { |
+ |
+ArcNetHostImpl::ArcNetHostImpl(ArcBridgeService* bridge_service) |
+ : ArcService(bridge_service), |
+ binding_(this), |
+ weak_factory_(this) { |
+ arc_bridge_service()->AddObserver(this); |
+} |
+ |
+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 = NetworkResult::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; |
+ value->GetAsDictionary(&network_dict); |
+ DCHECK(network_dict); |
+ |
+ // kName is a post-processed version of kHexSSID. |
+ std::string tmp; |
+ network_dict->GetString(onc::network_config::kName, &tmp); |
+ wc->ssid = tmp; |
+ |
+ base::DictionaryValue* wifi_dict = nullptr; |
+ network_dict->GetDictionary(onc::network_config::kWiFi, &wifi_dict); |
+ DCHECK(wifi_dict); |
+ |
+ wifi_dict->GetInteger(onc::wifi::kFrequency, &wc->frequency); |
+ wifi_dict->GetInteger(onc::wifi::kSignalStrength, &wc->signal_strength); |
stevenjb
2016/01/25 18:58:22
Is there a way to specify default values in mojo?
cernekee
2016/01/25 20:49:36
Done.
|
+ wifi_dict->GetString(onc::wifi::kSecurity, &tmp); |
stevenjb
2016/01/25 18:58:22
This should never fail or return empty (no wifi se
cernekee
2016/01/25 20:49:36
Done.
|
+ wc->security = tmp; |
+ wifi_dict->GetString(onc::wifi::kBSSID, &tmp); |
stevenjb
2016/01/25 18:58:22
We can also CHECK this.
cernekee
2016/01/25 20:49:36
Done.
|
+ wc->bssid = tmp; |
+ |
+ data->networks.push_back(std::move(wc)); |
+ } |
+ |
+ callback.Run(std::move(data)); |
+} |
+ |
+} // namespace arc |