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

Unified Diff: chrome/browser/chromeos/cros/network_library.cc

Issue 8734013: Resubmit CL. See 8429004. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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
« no previous file with comments | « chrome/browser/chromeos/cros/network_library.h ('k') | chrome/browser/chromeos/cros/network_parser.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/cros/network_library.cc
===================================================================
--- chrome/browser/chromeos/cros/network_library.cc (revision 112004)
+++ chrome/browser/chromeos/cros/network_library.cc (working copy)
@@ -18,6 +18,7 @@
#include "base/i18n/icu_encoding_detection.h"
#include "base/i18n/icu_string_conversions.h"
#include "base/i18n/time_formatting.h"
+#include "base/json/json_writer.h" // for debug output only.
#include "base/metrics/histogram.h"
#include "base/stl_util.h"
#include "base/string_number_conversions.h"
@@ -315,6 +316,22 @@
return new GValue();
}
+GHashTable* ConvertDictionaryValueToGValueMap(const DictionaryValue* dict) {
+ GHashTable* ghash =
+ g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+ for (DictionaryValue::key_iterator it = dict->begin_keys();
+ it != dict->end_keys(); ++it) {
+ std::string key = *it;
+ Value* val = NULL;
+ if (dict->Get(key, &val)) {
+ g_hash_table_insert(ghash,
+ g_strdup(const_cast<char*>(key.c_str())),
+ ConvertValueToGValue(val));
+ }
+ }
+ return ghash;
+}
+
} // namespace
////////////////////////////////////////////////////////////////////////////////
@@ -380,12 +397,30 @@
type_(type) {
}
-Network::~Network() {}
+Network::~Network() {
+ for (PropertyMap::const_iterator props = property_map_.begin();
+ props != property_map_.end(); ++props) {
+ delete props->second;
+ }
+}
void Network::SetNetworkParser(NetworkParser* parser) {
network_parser_.reset(parser);
}
+void Network::UpdatePropertyMap(PropertyIndex index, const base::Value& value) {
+ // Add the property to property_map_. Delete previous value if necessary.
+ Value*& entry = property_map_[index];
+ delete entry;
+ entry = value.DeepCopy();
+ if (VLOG_IS_ON(2)) {
+ std::string value_json;
+ base::JSONWriter::Write(&value, true, &value_json);
+ VLOG(2) << "Updated property map on network: "
+ << unique_id() << "[" << index << "] = " << value_json;
+ }
+}
+
void Network::SetState(ConnectionState new_state) {
if (new_state == state_)
return;
@@ -1463,6 +1498,10 @@
const std::string& service_name,
const std::string& server_hostname,
ProviderType provider_type) = 0;
+ // Call to configure a wifi service. The identifier is either a service_path
+ // or a GUID. |info| is a dictionary of property values.
+ virtual void CallConfigureService(const std::string& identifier,
+ const DictionaryValue* info) = 0;
// Called from NetworkConnectStart.
// Calls NetworkConnectCompleted when the connection attept completes.
virtual void CallConnectToNetwork(Network* network) = 0;
@@ -2791,13 +2830,23 @@
for (int i = 0; i < parser.GetNetworkConfigsSize(); i++) {
// Parse Open Network Configuration blob into a temporary Network object.
- Network* network = parser.ParseNetwork(i);
- if (!network) {
+ scoped_ptr<Network> network(parser.ParseNetwork(i));
+ if (!network.get()) {
DLOG(WARNING) << "Cannot parse networks in ONC file";
return false;
}
- // TODO(chocobo): Pass parsed network values to flimflam update network.
+ DictionaryValue dict;
+ for (Network::PropertyMap::const_iterator props =
+ network->property_map_.begin();
+ props != network->property_map_.end(); ++props) {
+ std::string key =
+ NativeNetworkParser::property_mapper()->GetKey(props->first);
+ if (!key.empty())
+ dict.SetWithoutPathExpansion(key, props->second->DeepCopy());
+ }
+
+ CallConfigureService(network->unique_id(), &dict);
}
return parser.GetNetworkConfigsSize() != 0;
}
@@ -3296,6 +3345,8 @@
virtual void MonitorNetworkDeviceStop(
const std::string& device_path) OVERRIDE;
+ virtual void CallConfigureService(const std::string& identifier,
+ const DictionaryValue* info) OVERRIDE;
virtual void CallConnectToNetwork(Network* network) OVERRIDE;
virtual void CallRequestWifiNetworkAndConnect(
const std::string& ssid, ConnectionSecurity security) OVERRIDE;
@@ -3359,6 +3410,11 @@
NetworkMethodErrorType error,
const char* error_message);
+ static void ConfigureServiceCallback(void* object,
+ const char* service_path,
+ NetworkMethodErrorType error,
+ const char* error_message);
+
static void NetworkConnectCallback(void* object,
const char* service_path,
NetworkMethodErrorType error,
@@ -3617,6 +3673,26 @@
// NetworkLibraryImplBase connect implementation.
// static callback
+void NetworkLibraryImplCros::ConfigureServiceCallback(
+ void* object,
+ const char* service_path,
+ NetworkMethodErrorType error,
+ const char* error_message) {
+ if (error != NETWORK_METHOD_ERROR_NONE) {
+ LOG(WARNING) << "Error from ConfigureService callback for: "
+ << service_path
+ << " Error: " << error << " Message: " << error_message;
+ }
+}
+
+void NetworkLibraryImplCros::CallConfigureService(const std::string& identifier,
+ const DictionaryValue* info) {
+ GHashTable* ghash = ConvertDictionaryValueToGValueMap(info);
+ chromeos::ConfigureService(identifier.c_str(), ghash,
+ ConfigureServiceCallback, this);
+}
+
+// static callback
void NetworkLibraryImplCros::NetworkConnectCallback(
void* object,
const char* service_path,
@@ -4703,6 +4779,8 @@
virtual void MonitorNetworkDeviceStop(
const std::string& device_path) OVERRIDE {}
+ virtual void CallConfigureService(const std::string& identifier,
+ const DictionaryValue* info) OVERRIDE {}
virtual void CallConnectToNetwork(Network* network) OVERRIDE;
virtual void CallRequestWifiNetworkAndConnect(
const std::string& ssid, ConnectionSecurity security) OVERRIDE;
@@ -4919,6 +4997,22 @@
// autotest browser_tests sometimes conclude the device is offline.
CHECK(active_network()->connected());
CHECK(connected_network()->is_active());
+
+ std::string test_blob(
+ "{"
+ " \"NetworkConfigurations\": ["
+ " {"
+ " \"GUID\": \"guid\","
+ " \"Type\": \"WiFi\","
+ " \"WiFi\": {"
+ " \"Security\": \"WEP\","
+ " \"SSID\": \"MySSID\","
+ " }"
+ " }"
+ " ],"
+ " \"Certificates\": []"
+ "}");
+ LoadOncNetworks(test_blob);
}
////////////////////////////////////////////////////////////////////////////
« no previous file with comments | « chrome/browser/chromeos/cros/network_library.h ('k') | chrome/browser/chromeos/cros/network_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698