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

Unified Diff: chrome/browser/chromeos/extensions/networking_private_api.cc

Issue 12319145: Using the new Network*Handlers in networkingPrivate Extension API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed some closing periods from comments. Created 7 years, 9 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: chrome/browser/chromeos/extensions/networking_private_api.cc
diff --git a/chrome/browser/chromeos/extensions/networking_private_api.cc b/chrome/browser/chromeos/extensions/networking_private_api.cc
index 0b8d14f9d77475117fe7ee5795a55b4c8720e5e7..f3da2fca78f9314f5e6561446a51a5b54a034c94 100644
--- a/chrome/browser/chromeos/extensions/networking_private_api.cc
+++ b/chrome/browser/chromeos/extensions/networking_private_api.cc
@@ -12,162 +12,15 @@
#include "chrome/common/extensions/api/networking_private.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/shill_manager_client.h"
-#include "chromeos/dbus/shill_service_client.h"
+#include "chromeos/network/network_state.h"
+#include "chromeos/network/network_state_handler.h"
#include "chromeos/network/onc/onc_constants.h"
#include "chromeos/network/onc/onc_signature.h"
-#include "chromeos/network/onc/onc_translation_tables.h"
#include "chromeos/network/onc/onc_translator.h"
-#include "dbus/object_path.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
using namespace chromeos;
namespace api = extensions::api::networking_private;
-namespace {
-
-// An error returned when no valid services were found.
-const char kInvalidResponseError[] = "Error.invalidResponse";
-
-// Filters from the given ONC dictionary the information we're interested in
-// before passing it to JavaScript.
-scoped_ptr<api::NetworkProperties> CreateFilteredResult(
- const base::DictionaryValue& onc_dictionary) {
- static const char* const desired_fields[] = {
- onc::network_config::kWiFi,
- onc::network_config::kName,
- onc::network_config::kGUID,
- onc::network_config::kType,
- onc::network_config::kConnectionState,
- };
-
- scoped_ptr<api::NetworkProperties> filtered_result(
- new api::NetworkProperties);
- for (size_t i = 0; i < arraysize(desired_fields); ++i) {
- const base::Value* value;
- if (onc_dictionary.GetWithoutPathExpansion(desired_fields[i], &value)) {
- filtered_result->additional_properties.SetWithoutPathExpansion(
- desired_fields[i],
- value->DeepCopy());
- }
- }
-
- return filtered_result.Pass();
-}
-
-class ResultList : public base::RefCounted<ResultList> {
- public:
- typedef base::Callback<void(const std::string& error,
- scoped_ptr<base::ListValue>)> ResultCallback;
-
- ResultList(const std::string& type, const ResultCallback& callback)
- : callback_(callback) {
- DBusThreadManager::Get()->GetShillManagerClient()->GetProperties(
- base::Bind(&ResultList::ManagerPropertiesCallback, this, type));
- }
-
- scoped_ptr<base::ListValue> GetResults() {
- return api::GetVisibleNetworks::Results::Create(list_);
- }
-
- private:
- friend class base::RefCounted<ResultList>;
-
- ~ResultList() {
- callback_.Run(std::string(), GetResults());
- }
-
- void Append(api::NetworkProperties* value) {
- list_.push_back(linked_ptr<api::NetworkProperties>(value));
- }
-
- // Receives the result of a call to GetProperties on the Shill Manager API.
- void ManagerPropertiesCallback(const std::string& network_type,
- chromeos::DBusMethodCallStatus call_status,
- const base::DictionaryValue& result);
-
- // Receives the result of a call to GetProperties on the Shill Service API.
- void ServicePropertiesCallback(const std::string& service_path,
- const std::string& network_type,
- chromeos::DBusMethodCallStatus call_status,
- const base::DictionaryValue& result);
-
- std::vector<linked_ptr<api::NetworkProperties> > list_;
- ResultCallback callback_;
-
- DISALLOW_COPY_AND_ASSIGN(ResultList);
-};
-
-// For each of the available services, fire off a request for its properties.
-void ResultList::ManagerPropertiesCallback(
- const std::string& network_type,
- DBusMethodCallStatus call_status,
- const base::DictionaryValue& result) {
- const base::ListValue* available_services;
- if (!result.GetList(flimflam::kServicesProperty, &available_services)) {
- LOG(ERROR)
- << "ShillManagerClient::GetProperties returned malformed service list.";
- callback_.Run(kInvalidResponseError, make_scoped_ptr(new base::ListValue));
- return;
- }
- // If there just are no services, return an empty list.
- if (available_services->GetSize() == 0) {
- callback_.Run(std::string(), make_scoped_ptr(new base::ListValue));
- return;
- }
- for (base::ListValue::const_iterator iter = available_services->begin();
- iter != available_services->end(); ++iter) {
- std::string service_path;
- if (!(*iter)->GetAsString(&service_path)) {
- LOG(ERROR)
- << "ShillManagerClient::GetProperties returned malformed service.";
- continue;
- }
-
- DBusThreadManager::Get()->GetShillServiceClient()->GetProperties(
- dbus::ObjectPath(service_path),
- base::Bind(
- &ResultList::ServicePropertiesCallback,
- this,
- service_path,
- network_type));
- }
-}
-
-void ResultList::ServicePropertiesCallback(
- const std::string& service_path,
- const std::string& network_type,
- DBusMethodCallStatus call_status,
- const base::DictionaryValue& result) {
- if (call_status == DBUS_METHOD_CALL_SUCCESS) {
- scoped_ptr<base::DictionaryValue> onc_properties(
- onc::TranslateShillServiceToONCPart(
- result,
- &onc::kNetworkWithStateSignature));
-
- scoped_ptr<api::NetworkProperties> filtered_result(
- CreateFilteredResult(*onc_properties));
-
- std::string onc_type;
- if (filtered_result->additional_properties.GetString(
- onc::network_config::kType, &onc_type) &&
- (onc_type == network_type ||
- network_type == onc::network_type::kAllTypes)) {
- // TODO(gspencer): For now the "GUID" we send back is going to look
- // remarkably like the service path. Once this code starts using the
- // NetworkStateHandler instead of Shill directly, we should remove
- // this line so that we're sending back the actual GUID. The
- // JavaScript shouldn't care: this ID is opaque to it, and it
- // shouldn't store it anywhere.
- filtered_result->additional_properties.SetStringWithoutPathExpansion(
- onc::network_config::kGUID, service_path);
-
- Append(filtered_result.release());
- }
- }
-}
-
-} // namespace
-
////////////////////////////////////////////////////////////////////////////////
// NetworkingPrivateGetPropertiesFunction
@@ -179,46 +32,26 @@ bool NetworkingPrivateGetPropertiesFunction::RunImpl() {
scoped_ptr<api::GetProperties::Params> params =
api::GetProperties::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
- if (ManagedNetworkConfigurationHandler::IsInitialized()) {
- ManagedNetworkConfigurationHandler::Get()->GetProperties(
- params->network_guid,
- base::Bind(
- &NetworkingPrivateGetPropertiesFunction::GetPropertiesSuccess,
- this),
- base::Bind(&NetworkingPrivateGetPropertiesFunction::GetPropertiesFailed,
- this));
- } else {
- // TODO(gspencer): Currently we're using the service path as the
- // |network_guid|. Eventually this should be using the real GUID.
- DBusThreadManager::Get()->GetShillServiceClient()->GetProperties(
- dbus::ObjectPath(params->network_guid),
- base::Bind(&NetworkingPrivateGetPropertiesFunction::ResultCallback,
- this,
- params->network_guid));
- }
- return true;
-}
+ // The |network_guid| parameter is storing the service path.
+ std::string service_path = params->network_guid;
-void NetworkingPrivateGetPropertiesFunction::ResultCallback(
- const std::string& service_path,
- DBusMethodCallStatus call_status,
- const base::DictionaryValue& result) {
- scoped_ptr<base::DictionaryValue> onc_properties(
- onc::TranslateShillServiceToONCPart(
- result,
- &onc::kNetworkWithStateSignature));
- GetPropertiesSuccess(service_path,
- *onc_properties);
+ ManagedNetworkConfigurationHandler::Get()->GetProperties(
+ service_path,
+ base::Bind(
+ &NetworkingPrivateGetPropertiesFunction::GetPropertiesSuccess,
+ this),
+ base::Bind(&NetworkingPrivateGetPropertiesFunction::GetPropertiesFailed,
+ this));
+ return true;
}
void NetworkingPrivateGetPropertiesFunction::GetPropertiesSuccess(
const std::string& service_path,
const base::DictionaryValue& dictionary) {
- scoped_ptr<api::NetworkProperties> filtered_result(
- CreateFilteredResult(dictionary));
- filtered_result->additional_properties.SetStringWithoutPathExpansion(
- onc::network_config::kGUID, service_path);
- results_ = api::GetProperties::Results::Create(*filtered_result);
+ base::DictionaryValue* network_properties = dictionary.DeepCopy();
+ network_properties->SetStringWithoutPathExpansion(onc::network_config::kGUID,
+ service_path);
+ SetResult(network_properties);
SendResponse(true);
}
@@ -240,25 +73,38 @@ bool NetworkingPrivateGetVisibleNetworksFunction::RunImpl() {
scoped_ptr<api::GetVisibleNetworks::Params> params =
api::GetVisibleNetworks::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
+ std::string type_filter =
+ api::GetVisibleNetworks::Params::ToString(params->type);
- scoped_refptr<ResultList> result_list(new ResultList(
- api::GetVisibleNetworks::Params::ToString(params->type),
- base::Bind(
- &NetworkingPrivateGetVisibleNetworksFunction::SendResultCallback,
- this)));
- return true;
-}
+ NetworkStateHandler::NetworkStateList network_states;
+ NetworkStateHandler::Get()->GetNetworkList(&network_states);
+
+ base::ListValue* network_properties_list = new base::ListValue;
+ for (NetworkStateHandler::NetworkStateList::iterator it =
+ network_states.begin();
+ it != network_states.end(); ++it) {
+ const std::string& service_path = (*it)->path();
+ base::DictionaryValue shill_dictionary;
+ (*it)->GetProperties(&shill_dictionary);
+
+ scoped_ptr<base::DictionaryValue> onc_network_part =
+ onc::TranslateShillServiceToONCPart(shill_dictionary,
+ &onc::kNetworkWithStateSignature);
-void NetworkingPrivateGetVisibleNetworksFunction::SendResultCallback(
- const std::string& error,
- scoped_ptr<base::ListValue> result_list) {
- if (!error.empty()) {
- error_ = error;
- SendResponse(false);
- } else {
- results_.reset(result_list.release());
- SendResponse(true);
+ std::string onc_type;
+ onc_network_part->GetStringWithoutPathExpansion(onc::network_config::kType,
+ &onc_type);
+ if (type_filter == onc::network_type::kAllTypes ||
+ onc_type == type_filter) {
+ onc_network_part->SetStringWithoutPathExpansion(
+ onc::network_config::kGUID,
+ service_path);
+ network_properties_list->Append(onc_network_part.release());
+ }
}
+
+ SetResult(network_properties_list);
+ return true;
}
////////////////////////////////////////////////////////////////////////////////
@@ -274,7 +120,7 @@ void NetworkingPrivateStartConnectFunction::ConnectionStartSuccess() {
void NetworkingPrivateStartConnectFunction::ConnectionStartFailed(
const std::string& error_name,
- const std::string& error_message) {
+ const scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
@@ -284,18 +130,17 @@ bool NetworkingPrivateStartConnectFunction::RunImpl() {
api::StartConnect::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
- // TODO(gspencer): For now, the "GUID" we receive from the JavaScript is going
- // to be the service path. Fix this so it actually looks up the service path
- // from the GUID once we're using the NetworkStateHandler.
+ // The |network_guid| parameter is storing the service path.
std::string service_path = params->network_guid;
- DBusThreadManager::Get()->GetShillServiceClient()->Connect(
- dbus::ObjectPath(service_path),
+ ManagedNetworkConfigurationHandler::Get()->Connect(
+ service_path,
base::Bind(
&NetworkingPrivateStartConnectFunction::ConnectionStartSuccess,
this),
- base::Bind(&NetworkingPrivateStartConnectFunction::ConnectionStartFailed,
- this));
+ base::Bind(
+ &NetworkingPrivateStartConnectFunction::ConnectionStartFailed,
+ this));
return true;
}
@@ -312,7 +157,7 @@ void NetworkingPrivateStartDisconnectFunction::DisconnectionStartSuccess() {
void NetworkingPrivateStartDisconnectFunction::DisconnectionStartFailed(
const std::string& error_name,
- const std::string& error_message) {
+ const scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
@@ -322,11 +167,11 @@ bool NetworkingPrivateStartDisconnectFunction::RunImpl() {
api::StartDisconnect::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
- // TODO(gspencer): Currently the |network_guid| parameter is storing the
- // service path. Convert to using the actual GUID when we start using
- // the NetworkStateHandler.
- DBusThreadManager::Get()->GetShillServiceClient()->Disconnect(
- dbus::ObjectPath(params->network_guid),
+ // The |network_guid| parameter is storing the service path.
+ std::string service_path = params->network_guid;
+
+ ManagedNetworkConfigurationHandler::Get()->Disconnect(
+ service_path,
base::Bind(
&NetworkingPrivateStartDisconnectFunction::DisconnectionStartSuccess,
this),

Powered by Google App Engine
This is Rietveld 408576698