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

Unified Diff: extensions/browser/api/networking_private/networking_private_chromeos.cc

Issue 1059033002: Implement networkingPrivate.getDeviceStates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698