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

Side by Side Diff: components/arc/net/arc_net_host_impl.cc

Issue 1925083003: Notify ARC of default network changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@wifi-change
Patch Set: forward-declare base::DictionaryValue Created 4 years, 7 months 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 unified diff | Download patch
« no previous file with comments | « components/arc/net/arc_net_host_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/arc/net/arc_net_host_impl.h" 5 #include "components/arc/net/arc_net_host_impl.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 11 matching lines...) Expand all
22 #include "chromeos/network/network_state_handler.h" 22 #include "chromeos/network/network_state_handler.h"
23 #include "chromeos/network/network_type_pattern.h" 23 #include "chromeos/network/network_type_pattern.h"
24 #include "chromeos/network/network_util.h" 24 #include "chromeos/network/network_util.h"
25 #include "chromeos/network/onc/onc_utils.h" 25 #include "chromeos/network/onc/onc_utils.h"
26 #include "components/arc/arc_bridge_service.h" 26 #include "components/arc/arc_bridge_service.h"
27 27
28 namespace { 28 namespace {
29 29
30 const int kGetNetworksListLimit = 100; 30 const int kGetNetworksListLimit = 100;
31 31
32 } // namespace
33
34 namespace arc {
35
36 chromeos::NetworkStateHandler* GetStateHandler() { 32 chromeos::NetworkStateHandler* GetStateHandler() {
37 return chromeos::NetworkHandler::Get()->network_state_handler(); 33 return chromeos::NetworkHandler::Get()->network_state_handler();
38 } 34 }
39 35
40 chromeos::ManagedNetworkConfigurationHandler* GetManagedConfigurationHandler() { 36 chromeos::ManagedNetworkConfigurationHandler* GetManagedConfigurationHandler() {
41 return chromeos::NetworkHandler::Get() 37 return chromeos::NetworkHandler::Get()
42 ->managed_network_configuration_handler(); 38 ->managed_network_configuration_handler();
43 } 39 }
44 40
45 chromeos::NetworkConnectionHandler* GetNetworkConnectionHandler() { 41 chromeos::NetworkConnectionHandler* GetNetworkConnectionHandler() {
46 return chromeos::NetworkHandler::Get()->network_connection_handler(); 42 return chromeos::NetworkHandler::Get()->network_connection_handler();
47 } 43 }
48 44
49 bool IsDeviceOwner() { 45 bool IsDeviceOwner() {
50 // Check whether the logged-in Chrome OS user is allowed to add or 46 // Check whether the logged-in Chrome OS user is allowed to add or
51 // remove WiFi networks. 47 // remove WiFi networks.
52 return chromeos::LoginState::Get()->GetLoggedInUserType() == 48 return chromeos::LoginState::Get()->GetLoggedInUserType() ==
53 chromeos::LoginState::LOGGED_IN_USER_OWNER; 49 chromeos::LoginState::LOGGED_IN_USER_OWNER;
54 } 50 }
55 51
52 std::string GetStringFromOncDictionary(const base::DictionaryValue* dict,
53 const char* key,
54 bool required) {
55 std::string value;
56 dict->GetString(key, &value);
57 if (required && value.empty())
58 NOTREACHED();
59 return value;
60 }
61
62 arc::mojom::SecurityType TranslateONCWifiSecurityType(
63 const base::DictionaryValue* dict) {
64 std::string type = GetStringFromOncDictionary(dict, onc::wifi::kSecurity,
65 true /* required */);
66 if (type == onc::wifi::kWEP_PSK)
67 return arc::mojom::SecurityType::WEP_PSK;
68 else if (type == onc::wifi::kWEP_8021X)
69 return arc::mojom::SecurityType::WEP_8021X;
70 else if (type == onc::wifi::kWPA_PSK)
71 return arc::mojom::SecurityType::WPA_PSK;
72 else if (type == onc::wifi::kWPA_EAP)
73 return arc::mojom::SecurityType::WPA_EAP;
74 else
75 return arc::mojom::SecurityType::NONE;
76 }
77
78 arc::mojom::WiFiPtr TranslateONCWifi(const base::DictionaryValue* dict) {
79 arc::mojom::WiFiPtr wifi = arc::mojom::WiFi::New();
80
81 // Optional; defaults to 0.
82 dict->GetInteger(onc::wifi::kFrequency, &wifi->frequency);
83
84 wifi->bssid =
85 GetStringFromOncDictionary(dict, onc::wifi::kBSSID, false /* required */);
86 wifi->hex_ssid = GetStringFromOncDictionary(dict, onc::wifi::kHexSSID,
87 true /* required */);
88
89 // Optional; defaults to false.
90 dict->GetBoolean(onc::wifi::kHiddenSSID, &wifi->hidden_ssid);
91
92 wifi->security = TranslateONCWifiSecurityType(dict);
93
94 // Optional; defaults to 0.
95 dict->GetInteger(onc::wifi::kSignalStrength, &wifi->signal_strength);
96
97 return wifi;
98 }
99
100 mojo::Array<mojo::String> TranslateStringArray(const base::ListValue* list) {
101 mojo::Array<mojo::String> strings = mojo::Array<mojo::String>::New(0);
102
103 for (size_t i = 0; i < list->GetSize(); i++) {
104 std::string value;
105 list->GetString(i, &value);
106 DCHECK(!value.empty());
107 strings.push_back(static_cast<mojo::String>(value));
108 }
109
110 return strings;
111 }
112
113 mojo::Array<arc::mojom::IPConfigurationPtr> TranslateONCIPConfigs(
114 const base::ListValue* list) {
115 mojo::Array<arc::mojom::IPConfigurationPtr> configs =
116 mojo::Array<arc::mojom::IPConfigurationPtr>::New(0);
117
118 for (size_t i = 0; i < list->GetSize(); i++) {
119 const base::DictionaryValue* ip_dict = nullptr;
120 arc::mojom::IPConfigurationPtr configuration =
121 arc::mojom::IPConfiguration::New();
122
123 list->GetDictionary(i, &ip_dict);
124 DCHECK(ip_dict);
125
126 configuration->gateway = GetStringFromOncDictionary(
127 ip_dict, onc::ipconfig::kGateway, true /* required */);
128 configuration->ip_address = GetStringFromOncDictionary(
129 ip_dict, onc::ipconfig::kIPAddress, true /* required */);
130
131 const base::ListValue* dns_list;
132 if (!ip_dict->GetList(onc::ipconfig::kNameServers, &dns_list))
133 NOTREACHED();
134 configuration->name_servers = TranslateStringArray(dns_list);
135
136 if (!ip_dict->GetInteger(onc::ipconfig::kRoutingPrefix,
137 &configuration->routing_prefix)) {
138 NOTREACHED();
139 }
140
141 std::string type = GetStringFromOncDictionary(ip_dict, onc::ipconfig::kType,
142 true /* required */);
143 configuration->type = type == onc::ipconfig::kIPv6
144 ? arc::mojom::IPAddressType::IPV6
145 : arc::mojom::IPAddressType::IPV4;
146
147 configuration->web_proxy_auto_discovery_url = GetStringFromOncDictionary(
148 ip_dict, onc::ipconfig::kWebProxyAutoDiscoveryUrl, true /* required */);
149
150 configs.push_back(std::move(configuration));
151 }
152 return configs;
153 }
154
155 arc::mojom::ConnectionStateType TranslateONCConnectionState(
156 const base::DictionaryValue* dict) {
157 std::string connection_state = GetStringFromOncDictionary(
158 dict, onc::network_config::kConnectionState, true /* required */);
159
160 if (connection_state == onc::connection_state::kConnected)
161 return arc::mojom::ConnectionStateType::CONNECTED;
162 else if (connection_state == onc::connection_state::kConnecting)
163 return arc::mojom::ConnectionStateType::CONNECTING;
164 else if (connection_state == onc::connection_state::kNotConnected)
165 return arc::mojom::ConnectionStateType::NOT_CONNECTED;
166
167 NOTREACHED();
168 return arc::mojom::ConnectionStateType::NOT_CONNECTED;
169 }
170
171 void TranslateONCNetworkTypeDetails(const base::DictionaryValue* dict,
172 arc::mojom::NetworkConfiguration* mojo) {
173 std::string type = GetStringFromOncDictionary(
174 dict, onc::network_config::kType, true /* required */);
175 if (type == onc::network_type::kCellular) {
176 mojo->type = arc::mojom::NetworkType::CELLULAR;
177 } else if (type == onc::network_type::kEthernet) {
178 mojo->type = arc::mojom::NetworkType::ETHERNET;
179 } else if (type == onc::network_type::kVPN) {
180 mojo->type = arc::mojom::NetworkType::VPN;
181 } else if (type == onc::network_type::kWiFi) {
182 mojo->type = arc::mojom::NetworkType::WIFI;
183
184 const base::DictionaryValue* wifi_dict = nullptr;
185 dict->GetDictionary(onc::network_config::kWiFi, &wifi_dict);
186 DCHECK(wifi_dict);
187 mojo->wifi = TranslateONCWifi(wifi_dict);
188 } else if (type == onc::network_type::kWimax) {
189 mojo->type = arc::mojom::NetworkType::WIMAX;
190 } else {
191 NOTREACHED();
192 }
193 }
194
195 arc::mojom::NetworkConfigurationPtr TranslateONCConfiguration(
196 const base::DictionaryValue* dict) {
197 arc::mojom::NetworkConfigurationPtr mojo =
198 arc::mojom::NetworkConfiguration::New();
199
200 mojo->connection_state = TranslateONCConnectionState(dict);
201
202 mojo->guid = GetStringFromOncDictionary(dict, onc::network_config::kGUID,
203 true /* required */);
204
205 const base::ListValue* ip_config_list = nullptr;
206 if (dict->GetList(onc::network_config::kIPConfigs, &ip_config_list)) {
207 DCHECK(ip_config_list);
208 mojo->ip_configs = TranslateONCIPConfigs(ip_config_list);
209 }
210
211 mojo->guid = GetStringFromOncDictionary(dict, onc::network_config::kGUID,
212 true /* required */);
213 mojo->mac_address = GetStringFromOncDictionary(
214 dict, onc::network_config::kMacAddress, true /* required */);
215 TranslateONCNetworkTypeDetails(dict, mojo.get());
216
217 return mojo;
218 }
219
220 void CreateNetworkSuccessCallback(
221 const arc::mojom::NetHost::CreateNetworkCallback& mojo_callback,
222 const std::string& service_path,
223 const std::string& guid) {
224 VLOG(1) << "CreateNetworkSuccessCallback";
225 mojo_callback.Run(guid);
226 }
227
228 void CreateNetworkFailureCallback(
229 const arc::mojom::NetHost::CreateNetworkCallback& mojo_callback,
230 const std::string& error_name,
231 std::unique_ptr<base::DictionaryValue> error_data) {
232 VLOG(1) << "CreateNetworkFailureCallback: " << error_name;
233 mojo_callback.Run("");
234 }
235
236 void ForgetNetworkSuccessCallback(
237 const arc::mojom::NetHost::ForgetNetworkCallback& mojo_callback) {
238 mojo_callback.Run(arc::mojom::NetworkResult::SUCCESS);
239 }
240
241 void ForgetNetworkFailureCallback(
242 const arc::mojom::NetHost::ForgetNetworkCallback& mojo_callback,
243 const std::string& error_name,
244 std::unique_ptr<base::DictionaryValue> error_data) {
245 VLOG(1) << "ForgetNetworkFailureCallback: " << error_name;
246 mojo_callback.Run(arc::mojom::NetworkResult::FAILURE);
247 }
248
249 void StartConnectSuccessCallback(
250 const arc::mojom::NetHost::StartConnectCallback& mojo_callback) {
251 mojo_callback.Run(arc::mojom::NetworkResult::SUCCESS);
252 }
253
254 void StartConnectFailureCallback(
255 const arc::mojom::NetHost::StartConnectCallback& mojo_callback,
256 const std::string& error_name,
257 std::unique_ptr<base::DictionaryValue> error_data) {
258 VLOG(1) << "StartConnectFailureCallback: " << error_name;
259 mojo_callback.Run(arc::mojom::NetworkResult::FAILURE);
260 }
261
262 void StartDisconnectSuccessCallback(
263 const arc::mojom::NetHost::StartDisconnectCallback& mojo_callback) {
264 mojo_callback.Run(arc::mojom::NetworkResult::SUCCESS);
265 }
266
267 void StartDisconnectFailureCallback(
268 const arc::mojom::NetHost::StartDisconnectCallback& mojo_callback,
269 const std::string& error_name,
270 std::unique_ptr<base::DictionaryValue> error_data) {
271 VLOG(1) << "StartDisconnectFailureCallback: " << error_name;
272 mojo_callback.Run(arc::mojom::NetworkResult::FAILURE);
273 }
274
275 void GetDefaultNetworkSuccessCallback(
276 const arc::ArcNetHostImpl::GetDefaultNetworkCallback& callback,
277 const std::string& service_path,
278 const base::DictionaryValue& dictionary) {
279 // TODO(cernekee): Figure out how to query Chrome for the default physical
280 // service if a VPN is connected, rather than just reporting the
281 // default logical service in both fields.
282 callback.Run(TranslateONCConfiguration(&dictionary),
283 TranslateONCConfiguration(&dictionary));
284 }
285
286 void GetDefaultNetworkFailureCallback(
287 const arc::ArcNetHostImpl::GetDefaultNetworkCallback& callback,
288 const std::string& error_name,
289 std::unique_ptr<base::DictionaryValue> error_data) {
290 LOG(ERROR) << "Failed to query default logical network";
291 callback.Run(nullptr, nullptr);
292 }
293
294 void DefaultNetworkFailureCallback(
295 const std::string& error_name,
296 std::unique_ptr<base::DictionaryValue> error_data) {
297 LOG(ERROR) << "Failed to query default logical network";
298 }
299
300 } // namespace
301
302 namespace arc {
303
56 ArcNetHostImpl::ArcNetHostImpl(ArcBridgeService* bridge_service) 304 ArcNetHostImpl::ArcNetHostImpl(ArcBridgeService* bridge_service)
57 : ArcService(bridge_service), binding_(this) { 305 : ArcService(bridge_service), binding_(this), weak_factory_(this) {
58 arc_bridge_service()->AddObserver(this); 306 arc_bridge_service()->AddObserver(this);
59 GetStateHandler()->AddObserver(this, FROM_HERE); 307 GetStateHandler()->AddObserver(this, FROM_HERE);
60 } 308 }
61 309
62 ArcNetHostImpl::~ArcNetHostImpl() { 310 ArcNetHostImpl::~ArcNetHostImpl() {
63 DCHECK(thread_checker_.CalledOnValidThread()); 311 DCHECK(thread_checker_.CalledOnValidThread());
64 arc_bridge_service()->RemoveObserver(this); 312 arc_bridge_service()->RemoveObserver(this);
65 if (chromeos::NetworkHandler::IsInitialized()) { 313 if (chromeos::NetworkHandler::IsInitialized()) {
66 GetStateHandler()->RemoveObserver(this, FROM_HERE); 314 GetStateHandler()->RemoveObserver(this, FROM_HERE);
67 } 315 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 details->bssid = wc->bssid; 414 details->bssid = wc->bssid;
167 wc->details = mojom::NetworkDetails::New(); 415 wc->details = mojom::NetworkDetails::New();
168 wc->details->set_visible(std::move(details)); 416 wc->details->set_visible(std::move(details));
169 417
170 networks.push_back(std::move(wc)); 418 networks.push_back(std::move(wc));
171 } 419 }
172 data->networks = std::move(networks); 420 data->networks = std::move(networks);
173 callback.Run(std::move(data)); 421 callback.Run(std::move(data));
174 } 422 }
175 423
176 void CreateNetworkSuccessCallback(
177 const arc::mojom::NetHost::CreateNetworkCallback& mojo_callback,
178 const std::string& service_path,
179 const std::string& guid) {
180 VLOG(1) << "CreateNetworkSuccessCallback";
181 mojo_callback.Run(guid);
182 }
183
184 void CreateNetworkFailureCallback(
185 const arc::mojom::NetHost::CreateNetworkCallback& mojo_callback,
186 const std::string& error_name,
187 std::unique_ptr<base::DictionaryValue> error_data) {
188 VLOG(1) << "CreateNetworkFailureCallback: " << error_name;
189 mojo_callback.Run("");
190 }
191
192 void ArcNetHostImpl::CreateNetwork(mojom::WifiConfigurationPtr cfg, 424 void ArcNetHostImpl::CreateNetwork(mojom::WifiConfigurationPtr cfg,
193 const CreateNetworkCallback& callback) { 425 const CreateNetworkCallback& callback) {
194 if (!IsDeviceOwner()) { 426 if (!IsDeviceOwner()) {
195 callback.Run(""); 427 callback.Run("");
196 return; 428 return;
197 } 429 }
198 430
199 std::unique_ptr<base::DictionaryValue> properties(new base::DictionaryValue); 431 std::unique_ptr<base::DictionaryValue> properties(new base::DictionaryValue);
200 std::unique_ptr<base::DictionaryValue> wifi_dict(new base::DictionaryValue); 432 std::unique_ptr<base::DictionaryValue> wifi_dict(new base::DictionaryValue);
201 433
(...skipping 27 matching lines...) Expand all
229 properties->SetWithoutPathExpansion(onc::network_config::kWiFi, 461 properties->SetWithoutPathExpansion(onc::network_config::kWiFi,
230 std::move(wifi_dict)); 462 std::move(wifi_dict));
231 463
232 std::string user_id_hash = chromeos::LoginState::Get()->primary_user_hash(); 464 std::string user_id_hash = chromeos::LoginState::Get()->primary_user_hash();
233 GetManagedConfigurationHandler()->CreateConfiguration( 465 GetManagedConfigurationHandler()->CreateConfiguration(
234 user_id_hash, *properties, 466 user_id_hash, *properties,
235 base::Bind(&CreateNetworkSuccessCallback, callback), 467 base::Bind(&CreateNetworkSuccessCallback, callback),
236 base::Bind(&CreateNetworkFailureCallback, callback)); 468 base::Bind(&CreateNetworkFailureCallback, callback));
237 } 469 }
238 470
239 void ForgetNetworkSuccessCallback(
240 const arc::mojom::NetHost::ForgetNetworkCallback& mojo_callback) {
241 mojo_callback.Run(mojom::NetworkResult::SUCCESS);
242 }
243
244 void ForgetNetworkFailureCallback(
245 const arc::mojom::NetHost::ForgetNetworkCallback& mojo_callback,
246 const std::string& error_name,
247 std::unique_ptr<base::DictionaryValue> error_data) {
248 VLOG(1) << "ForgetNetworkFailureCallback: " << error_name;
249 mojo_callback.Run(mojom::NetworkResult::FAILURE);
250 }
251
252 void ArcNetHostImpl::ForgetNetwork(const mojo::String& guid, 471 void ArcNetHostImpl::ForgetNetwork(const mojo::String& guid,
253 const ForgetNetworkCallback& callback) { 472 const ForgetNetworkCallback& callback) {
254 if (!IsDeviceOwner()) { 473 if (!IsDeviceOwner()) {
255 callback.Run(mojom::NetworkResult::FAILURE); 474 callback.Run(mojom::NetworkResult::FAILURE);
256 return; 475 return;
257 } 476 }
258 477
259 const chromeos::NetworkState* network = 478 const chromeos::NetworkState* network =
260 GetStateHandler()->GetNetworkStateFromGuid(guid); 479 GetStateHandler()->GetNetworkStateFromGuid(guid);
261 480
262 if (!network) { 481 if (!network) {
263 callback.Run(mojom::NetworkResult::FAILURE); 482 callback.Run(mojom::NetworkResult::FAILURE);
264 return; 483 return;
265 } 484 }
266 485
267 GetManagedConfigurationHandler()->RemoveConfiguration( 486 GetManagedConfigurationHandler()->RemoveConfiguration(
268 network->path(), base::Bind(&ForgetNetworkSuccessCallback, callback), 487 network->path(), base::Bind(&ForgetNetworkSuccessCallback, callback),
269 base::Bind(&ForgetNetworkFailureCallback, callback)); 488 base::Bind(&ForgetNetworkFailureCallback, callback));
270 } 489 }
271 490
272 void StartConnectSuccessCallback(
273 const arc::mojom::NetHost::StartConnectCallback& mojo_callback) {
274 mojo_callback.Run(mojom::NetworkResult::SUCCESS);
275 }
276
277 void StartConnectFailureCallback(
278 const arc::mojom::NetHost::StartConnectCallback& mojo_callback,
279 const std::string& error_name,
280 std::unique_ptr<base::DictionaryValue> error_data) {
281 VLOG(1) << "StartConnectFailureCallback: " << error_name;
282 mojo_callback.Run(mojom::NetworkResult::FAILURE);
283 }
284
285 void ArcNetHostImpl::StartConnect(const mojo::String& guid, 491 void ArcNetHostImpl::StartConnect(const mojo::String& guid,
286 const StartConnectCallback& callback) { 492 const StartConnectCallback& callback) {
287 const chromeos::NetworkState* network = 493 const chromeos::NetworkState* network =
288 GetStateHandler()->GetNetworkStateFromGuid(guid); 494 GetStateHandler()->GetNetworkStateFromGuid(guid);
289 495
290 if (!network) { 496 if (!network) {
291 callback.Run(mojom::NetworkResult::FAILURE); 497 callback.Run(mojom::NetworkResult::FAILURE);
292 return; 498 return;
293 } 499 }
294 500
295 GetNetworkConnectionHandler()->ConnectToNetwork( 501 GetNetworkConnectionHandler()->ConnectToNetwork(
296 network->path(), base::Bind(&StartConnectSuccessCallback, callback), 502 network->path(), base::Bind(&StartConnectSuccessCallback, callback),
297 base::Bind(&StartConnectFailureCallback, callback), false); 503 base::Bind(&StartConnectFailureCallback, callback), false);
298 } 504 }
299 505
300 void StartDisconnectSuccessCallback(
301 const arc::mojom::NetHost::StartDisconnectCallback& mojo_callback) {
302 mojo_callback.Run(mojom::NetworkResult::SUCCESS);
303 }
304
305 void StartDisconnectFailureCallback(
306 const arc::mojom::NetHost::StartDisconnectCallback& mojo_callback,
307 const std::string& error_name,
308 std::unique_ptr<base::DictionaryValue> error_data) {
309 VLOG(1) << "StartDisconnectFailureCallback: " << error_name;
310 mojo_callback.Run(mojom::NetworkResult::FAILURE);
311 }
312
313 void ArcNetHostImpl::StartDisconnect(const mojo::String& guid, 506 void ArcNetHostImpl::StartDisconnect(const mojo::String& guid,
314 const StartDisconnectCallback& callback) { 507 const StartDisconnectCallback& callback) {
315 const chromeos::NetworkState* network = 508 const chromeos::NetworkState* network =
316 GetStateHandler()->GetNetworkStateFromGuid(guid); 509 GetStateHandler()->GetNetworkStateFromGuid(guid);
317 510
318 if (!network) { 511 if (!network) {
319 callback.Run(mojom::NetworkResult::FAILURE); 512 callback.Run(mojom::NetworkResult::FAILURE);
320 return; 513 return;
321 } 514 }
322 515
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 return; 556 return;
364 } 557 }
365 if (arc_bridge_service()->net_version() < 1) { 558 if (arc_bridge_service()->net_version() < 1) {
366 VLOG(1) << "NetInstance does not support ScanCompleted."; 559 VLOG(1) << "NetInstance does not support ScanCompleted.";
367 return; 560 return;
368 } 561 }
369 562
370 arc_bridge_service()->net_instance()->ScanCompleted(); 563 arc_bridge_service()->net_instance()->ScanCompleted();
371 } 564 }
372 565
566 void ArcNetHostImpl::GetDefaultNetwork(
567 const GetDefaultNetworkCallback& callback) {
568 const chromeos::NetworkState* default_network =
569 GetStateHandler()->DefaultNetwork();
570 if (!default_network) {
571 VLOG(1) << "GetDefaultNetwork: no default network";
572 callback.Run(nullptr, nullptr);
573 return;
574 }
575 VLOG(1) << "GetDefaultNetwork: default network is "
576 << default_network->path();
577 std::string user_id_hash = chromeos::LoginState::Get()->primary_user_hash();
578 GetManagedConfigurationHandler()->GetProperties(
579 user_id_hash, default_network->path(),
580 base::Bind(&GetDefaultNetworkSuccessCallback, callback),
581 base::Bind(&GetDefaultNetworkFailureCallback, callback));
582 }
583
584 void ArcNetHostImpl::DefaultNetworkSuccessCallback(
585 const std::string& service_path,
586 const base::DictionaryValue& dictionary) {
587 arc_bridge_service()->net_instance()->DefaultNetworkChanged(
588 TranslateONCConfiguration(&dictionary),
589 TranslateONCConfiguration(&dictionary));
590 }
591
592 void ArcNetHostImpl::DefaultNetworkChanged(
593 const chromeos::NetworkState* network) {
594 if (arc_bridge_service()->net_version() < 2) {
595 VLOG(1) << "ArcBridgeService does not support DefaultNetworkChanged.";
596 return;
597 }
598
599 if (!network) {
600 VLOG(1) << "No default network";
601 arc_bridge_service()->net_instance()->DefaultNetworkChanged(nullptr,
602 nullptr);
603 return;
604 }
605
606 VLOG(1) << "New default network: " << network->path();
607 std::string user_id_hash = chromeos::LoginState::Get()->primary_user_hash();
608 GetManagedConfigurationHandler()->GetProperties(
609 user_id_hash, network->path(),
610 base::Bind(&arc::ArcNetHostImpl::DefaultNetworkSuccessCallback,
611 weak_factory_.GetWeakPtr()),
612 base::Bind(&DefaultNetworkFailureCallback));
613 }
614
373 void ArcNetHostImpl::OnShuttingDown() { 615 void ArcNetHostImpl::OnShuttingDown() {
374 GetStateHandler()->RemoveObserver(this, FROM_HERE); 616 GetStateHandler()->RemoveObserver(this, FROM_HERE);
375 } 617 }
376 618
377 } // namespace arc 619 } // namespace arc
OLDNEW
« no previous file with comments | « components/arc/net/arc_net_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698