OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/networking_private/networking_private_chromeos. h" | 5 #include "extensions/browser/api/networking_private/networking_private_chromeos. h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "chromeos/dbus/dbus_thread_manager.h" | 10 #include "chromeos/dbus/dbus_thread_manager.h" |
11 #include "chromeos/dbus/shill_manager_client.h" | 11 #include "chromeos/dbus/shill_manager_client.h" |
12 #include "chromeos/login/login_state.h" | 12 #include "chromeos/login/login_state.h" |
13 #include "chromeos/network/device_state.h" | |
13 #include "chromeos/network/managed_network_configuration_handler.h" | 14 #include "chromeos/network/managed_network_configuration_handler.h" |
14 #include "chromeos/network/network_activation_handler.h" | 15 #include "chromeos/network/network_activation_handler.h" |
15 #include "chromeos/network/network_connection_handler.h" | 16 #include "chromeos/network/network_connection_handler.h" |
16 #include "chromeos/network/network_device_handler.h" | 17 #include "chromeos/network/network_device_handler.h" |
17 #include "chromeos/network/network_event_log.h" | 18 #include "chromeos/network/network_event_log.h" |
18 #include "chromeos/network/network_state.h" | 19 #include "chromeos/network/network_state.h" |
19 #include "chromeos/network/network_state_handler.h" | 20 #include "chromeos/network/network_state_handler.h" |
20 #include "chromeos/network/network_util.h" | 21 #include "chromeos/network/network_util.h" |
21 #include "chromeos/network/onc/onc_signature.h" | 22 #include "chromeos/network/onc/onc_signature.h" |
22 #include "chromeos/network/onc/onc_translator.h" | 23 #include "chromeos/network/onc/onc_translator.h" |
23 #include "chromeos/network/onc/onc_utils.h" | 24 #include "chromeos/network/onc/onc_utils.h" |
24 #include "chromeos/network/portal_detector/network_portal_detector.h" | 25 #include "chromeos/network/portal_detector/network_portal_detector.h" |
25 #include "components/onc/onc_constants.h" | 26 #include "components/onc/onc_constants.h" |
26 #include "content/public/browser/browser_context.h" | 27 #include "content/public/browser/browser_context.h" |
27 #include "extensions/browser/api/networking_private/networking_private_api.h" | 28 #include "extensions/browser/api/networking_private/networking_private_api.h" |
28 #include "extensions/browser/extensions_browser_client.h" | 29 #include "extensions/browser/extensions_browser_client.h" |
29 #include "extensions/common/api/networking_private.h" | |
30 | 30 |
31 using chromeos::DeviceState; | |
31 using chromeos::NetworkHandler; | 32 using chromeos::NetworkHandler; |
33 using chromeos::NetworkStateHandler; | |
32 using chromeos::NetworkTypePattern; | 34 using chromeos::NetworkTypePattern; |
33 using chromeos::ShillManagerClient; | 35 using chromeos::ShillManagerClient; |
34 using extensions::NetworkingPrivateDelegate; | 36 using extensions::NetworkingPrivateDelegate; |
35 | 37 |
38 namespace private_api = extensions::core_api::networking_private; | |
39 | |
36 namespace { | 40 namespace { |
37 | 41 |
38 chromeos::NetworkStateHandler* GetStateHandler() { | 42 chromeos::NetworkStateHandler* GetStateHandler() { |
39 return NetworkHandler::Get()->network_state_handler(); | 43 return NetworkHandler::Get()->network_state_handler(); |
40 } | 44 } |
41 | 45 |
42 chromeos::ManagedNetworkConfigurationHandler* GetManagedConfigurationHandler() { | 46 chromeos::ManagedNetworkConfigurationHandler* GetManagedConfigurationHandler() { |
43 return NetworkHandler::Get()->managed_network_configuration_handler(); | 47 return NetworkHandler::Get()->managed_network_configuration_handler(); |
44 } | 48 } |
45 | 49 |
(...skipping 24 matching lines...) Expand all Loading... | |
70 // to avoid complexities with the policy code. | 74 // to avoid complexities with the policy code. |
71 LOG(ERROR) << "networkingPrivate API call from non primary user: " | 75 LOG(ERROR) << "networkingPrivate API call from non primary user: " |
72 << context_user_hash; | 76 << context_user_hash; |
73 *error = "Error.NonPrimaryUser"; | 77 *error = "Error.NonPrimaryUser"; |
74 return false; | 78 return false; |
75 } | 79 } |
76 *user_hash = context_user_hash; | 80 *user_hash = context_user_hash; |
77 return true; | 81 return true; |
78 } | 82 } |
79 | 83 |
84 void AppendDeviceState( | |
85 const std::string& type, | |
86 const DeviceState* device, | |
87 NetworkingPrivateDelegate::DeviceStateList* device_state_list) { | |
88 DCHECK(!type.empty()); | |
89 NetworkTypePattern pattern = | |
90 chromeos::onc::NetworkTypePatternFromOncType(type); | |
91 NetworkStateHandler::TechnologyState technology_state = | |
92 GetStateHandler()->GetTechnologyState(pattern); | |
93 private_api::DeviceStateType state = private_api::DEVICE_STATE_TYPE_NONE; | |
94 switch (technology_state) { | |
95 case NetworkStateHandler::TECHNOLOGY_UNAVAILABLE: | |
96 if (!device) | |
97 return; | |
98 // If we have a DeviceState entry but the technology is not available, | |
99 // assume the technology is not initialized. | |
100 state = private_api::DEVICE_STATE_TYPE_UNINITIALIZED; | |
101 break; | |
102 case NetworkStateHandler::TECHNOLOGY_AVAILABLE: | |
103 state = private_api::DEVICE_STATE_TYPE_DISABLED; | |
104 break; | |
105 case NetworkStateHandler::TECHNOLOGY_UNINITIALIZED: | |
106 state = private_api::DEVICE_STATE_TYPE_UNINITIALIZED; | |
107 break; | |
108 case NetworkStateHandler::TECHNOLOGY_ENABLING: | |
109 state = private_api::DEVICE_STATE_TYPE_ENABLING; | |
110 break; | |
111 case NetworkStateHandler::TECHNOLOGY_ENABLED: | |
112 state = private_api::DEVICE_STATE_TYPE_ENABLED; | |
113 break; | |
114 } | |
115 DCHECK(state != private_api::DEVICE_STATE_TYPE_NONE); | |
pneubeck (no reviews)
2015/04/09 09:41:22
DCHECK_NE( , )
stevenjb
2015/04/09 16:20:25
Done.
| |
116 scoped_ptr<private_api::DeviceStateProperties> properties( | |
117 new private_api::DeviceStateProperties); | |
118 properties->type = private_api::ParseNetworkType(type); | |
119 properties->state = state; | |
120 if (device && state == private_api::DEVICE_STATE_TYPE_ENABLED) | |
121 properties->scanning.reset(new bool(device->scanning())); | |
122 device_state_list->push_back(properties.Pass()); | |
123 } | |
124 | |
80 void NetworkHandlerDictionaryCallback( | 125 void NetworkHandlerDictionaryCallback( |
81 const NetworkingPrivateDelegate::DictionaryCallback& callback, | 126 const NetworkingPrivateDelegate::DictionaryCallback& callback, |
82 const std::string& service_path, | 127 const std::string& service_path, |
83 const base::DictionaryValue& dictionary) { | 128 const base::DictionaryValue& dictionary) { |
84 scoped_ptr<base::DictionaryValue> dictionary_copy(dictionary.DeepCopy()); | 129 scoped_ptr<base::DictionaryValue> dictionary_copy(dictionary.DeepCopy()); |
85 callback.Run(dictionary_copy.Pass()); | 130 callback.Run(dictionary_copy.Pass()); |
86 } | 131 } |
87 | 132 |
88 void NetworkHandlerFailureCallback( | 133 void NetworkHandlerFailureCallback( |
89 const NetworkingPrivateDelegate::FailureCallback& callback, | 134 const NetworkingPrivateDelegate::FailureCallback& callback, |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
326 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::WiFi())) | 371 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::WiFi())) |
327 network_list->AppendString(::onc::network_type::kWiFi); | 372 network_list->AppendString(::onc::network_type::kWiFi); |
328 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())) | 373 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())) |
329 network_list->AppendString(::onc::network_type::kWimax); | 374 network_list->AppendString(::onc::network_type::kWimax); |
330 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Cellular())) | 375 if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Cellular())) |
331 network_list->AppendString(::onc::network_type::kCellular); | 376 network_list->AppendString(::onc::network_type::kCellular); |
332 | 377 |
333 return network_list.Pass(); | 378 return network_list.Pass(); |
334 } | 379 } |
335 | 380 |
381 scoped_ptr<NetworkingPrivateDelegate::DeviceStateList> | |
382 NetworkingPrivateChromeOS::GetDeviceStateList() { | |
383 std::set<std::string> technologies_found; | |
384 NetworkStateHandler::DeviceStateList devices; | |
385 NetworkHandler::Get()->network_state_handler()->GetDeviceList(&devices); | |
386 | |
387 scoped_ptr<DeviceStateList> device_state_list(new DeviceStateList); | |
388 for (const DeviceState* device : devices) { | |
389 std::string onc_type = | |
390 chromeos::network_util::TranslateShillTypeToONC(device->type()); | |
391 AppendDeviceState(onc_type, device, device_state_list.get()); | |
392 technologies_found.insert(onc_type); | |
393 } | |
394 | |
395 // For any technologies that we do not have a DeviceState entry for, append | |
396 // an entry if the technolog is available. | |
397 const char* technology_types[] = {::onc::network_type::kEthernet, | |
pneubeck (no reviews)
2015/04/09 09:41:22
NetworkTypePattern is copyable, so you should be a
stevenjb
2015/04/09 16:20:25
I don't follow. In line 390 we do shill -> ONC, he
| |
398 ::onc::network_type::kWiFi, | |
399 ::onc::network_type::kWimax, | |
400 ::onc::network_type::kCellular}; | |
401 for (size_t i = 0; i < arraysize(technology_types); ++i) { | |
pneubeck (no reviews)
2015/04/09 09:41:22
for (const char* technology : technology_types) {
stevenjb
2015/04/09 16:20:25
Huh, I didn't know that worked with arrays. Done.
| |
402 std::string technology(technology_types[i]); | |
403 if (technologies_found.count(technology) > 0) | |
pneubeck (no reviews)
2015/04/09 09:41:22
from stl_util.h
ContainsValue(technologies_found,
stevenjb
2015/04/09 16:20:25
Done.
| |
404 continue; | |
405 AppendDeviceState(technology, nullptr /* device */, | |
406 device_state_list.get()); | |
407 } | |
408 return device_state_list.Pass(); | |
409 } | |
410 | |
336 bool NetworkingPrivateChromeOS::EnableNetworkType(const std::string& type) { | 411 bool NetworkingPrivateChromeOS::EnableNetworkType(const std::string& type) { |
337 NetworkTypePattern pattern = | 412 NetworkTypePattern pattern = |
338 chromeos::onc::NetworkTypePatternFromOncType(type); | 413 chromeos::onc::NetworkTypePatternFromOncType(type); |
339 | 414 |
340 GetStateHandler()->SetTechnologyEnabled( | 415 GetStateHandler()->SetTechnologyEnabled( |
341 pattern, true, chromeos::network_handler::ErrorCallback()); | 416 pattern, true, chromeos::network_handler::ErrorCallback()); |
342 | 417 |
343 return true; | 418 return true; |
344 } | 419 } |
345 | 420 |
346 bool NetworkingPrivateChromeOS::DisableNetworkType(const std::string& type) { | 421 bool NetworkingPrivateChromeOS::DisableNetworkType(const std::string& type) { |
347 NetworkTypePattern pattern = | 422 NetworkTypePattern pattern = |
348 chromeos::onc::NetworkTypePatternFromOncType(type); | 423 chromeos::onc::NetworkTypePatternFromOncType(type); |
349 | 424 |
350 GetStateHandler()->SetTechnologyEnabled( | 425 GetStateHandler()->SetTechnologyEnabled( |
351 pattern, false, chromeos::network_handler::ErrorCallback()); | 426 pattern, false, chromeos::network_handler::ErrorCallback()); |
352 | 427 |
353 return true; | 428 return true; |
354 } | 429 } |
355 | 430 |
356 bool NetworkingPrivateChromeOS::RequestScan() { | 431 bool NetworkingPrivateChromeOS::RequestScan() { |
357 GetStateHandler()->RequestScan(); | 432 GetStateHandler()->RequestScan(); |
358 return true; | 433 return true; |
359 } | 434 } |
360 | 435 |
361 } // namespace extensions | 436 } // namespace extensions |
OLD | NEW |