Chromium Code Reviews| Index: extensions/browser/api/networking_private/networking_private_chromeos.cc |
| diff --git a/extensions/browser/api/networking_private/networking_private_chromeos.cc b/extensions/browser/api/networking_private/networking_private_chromeos.cc |
| index 1179f4cfa056ca170b690bb30f48ee4f762cd2d3..a97a0eff4cc8b3dfb562e2497172f386e5f9d196 100644 |
| --- a/extensions/browser/api/networking_private/networking_private_chromeos.cc |
| +++ b/extensions/browser/api/networking_private/networking_private_chromeos.cc |
| @@ -10,6 +10,7 @@ |
| #include "chromeos/dbus/dbus_thread_manager.h" |
| #include "chromeos/dbus/shill_manager_client.h" |
| #include "chromeos/login/login_state.h" |
| +#include "chromeos/network/device_state.h" |
| #include "chromeos/network/managed_network_configuration_handler.h" |
| #include "chromeos/network/network_activation_handler.h" |
| #include "chromeos/network/network_connection_handler.h" |
| @@ -26,13 +27,16 @@ |
| #include "content/public/browser/browser_context.h" |
| #include "extensions/browser/api/networking_private/networking_private_api.h" |
| #include "extensions/browser/extensions_browser_client.h" |
| -#include "extensions/common/api/networking_private.h" |
| +using chromeos::DeviceState; |
| using chromeos::NetworkHandler; |
| +using chromeos::NetworkStateHandler; |
| using chromeos::NetworkTypePattern; |
| using chromeos::ShillManagerClient; |
| using extensions::NetworkingPrivateDelegate; |
| +namespace private_api = extensions::core_api::networking_private; |
| + |
| namespace { |
| chromeos::NetworkStateHandler* GetStateHandler() { |
| @@ -77,6 +81,47 @@ bool GetUserIdHash(content::BrowserContext* browser_context, |
| return true; |
| } |
| +void AppendDeviceState( |
| + const std::string& type, |
| + const DeviceState* device, |
| + NetworkingPrivateDelegate::DeviceStateList* device_state_list) { |
| + DCHECK(!type.empty()); |
| + NetworkTypePattern pattern = |
| + chromeos::onc::NetworkTypePatternFromOncType(type); |
| + NetworkStateHandler::TechnologyState technology_state = |
| + GetStateHandler()->GetTechnologyState(pattern); |
| + private_api::DeviceStateType state = private_api::DEVICE_STATE_TYPE_NONE; |
| + switch (technology_state) { |
| + case NetworkStateHandler::TECHNOLOGY_UNAVAILABLE: |
| + if (!device) |
| + return; |
| + // If we have a DeviceState entry but the technology is not available, |
| + // assume the technology is not initialized. |
| + state = private_api::DEVICE_STATE_TYPE_UNINITIALIZED; |
| + break; |
| + case NetworkStateHandler::TECHNOLOGY_AVAILABLE: |
| + state = private_api::DEVICE_STATE_TYPE_DISABLED; |
| + break; |
| + case NetworkStateHandler::TECHNOLOGY_UNINITIALIZED: |
| + state = private_api::DEVICE_STATE_TYPE_UNINITIALIZED; |
| + break; |
| + case NetworkStateHandler::TECHNOLOGY_ENABLING: |
| + state = private_api::DEVICE_STATE_TYPE_ENABLING; |
| + break; |
| + case NetworkStateHandler::TECHNOLOGY_ENABLED: |
| + state = private_api::DEVICE_STATE_TYPE_ENABLED; |
| + break; |
| + } |
| + 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.
|
| + scoped_ptr<private_api::DeviceStateProperties> properties( |
| + new private_api::DeviceStateProperties); |
| + properties->type = private_api::ParseNetworkType(type); |
| + properties->state = state; |
| + if (device && state == private_api::DEVICE_STATE_TYPE_ENABLED) |
| + properties->scanning.reset(new bool(device->scanning())); |
| + device_state_list->push_back(properties.Pass()); |
| +} |
| + |
| void NetworkHandlerDictionaryCallback( |
| const NetworkingPrivateDelegate::DictionaryCallback& callback, |
| const std::string& service_path, |
| @@ -333,6 +378,36 @@ NetworkingPrivateChromeOS::GetEnabledNetworkTypes() { |
| return network_list.Pass(); |
| } |
| +scoped_ptr<NetworkingPrivateDelegate::DeviceStateList> |
| +NetworkingPrivateChromeOS::GetDeviceStateList() { |
| + std::set<std::string> technologies_found; |
| + NetworkStateHandler::DeviceStateList devices; |
| + NetworkHandler::Get()->network_state_handler()->GetDeviceList(&devices); |
| + |
| + scoped_ptr<DeviceStateList> device_state_list(new DeviceStateList); |
| + for (const DeviceState* device : devices) { |
| + std::string onc_type = |
| + chromeos::network_util::TranslateShillTypeToONC(device->type()); |
| + AppendDeviceState(onc_type, device, device_state_list.get()); |
| + technologies_found.insert(onc_type); |
| + } |
| + |
| + // For any technologies that we do not have a DeviceState entry for, append |
| + // an entry if the technolog is available. |
| + 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
|
| + ::onc::network_type::kWiFi, |
| + ::onc::network_type::kWimax, |
| + ::onc::network_type::kCellular}; |
| + 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.
|
| + std::string technology(technology_types[i]); |
| + 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.
|
| + continue; |
| + AppendDeviceState(technology, nullptr /* device */, |
| + device_state_list.get()); |
| + } |
| + return device_state_list.Pass(); |
| +} |
| + |
| bool NetworkingPrivateChromeOS::EnableNetworkType(const std::string& type) { |
| NetworkTypePattern pattern = |
| chromeos::onc::NetworkTypePatternFromOncType(type); |