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

Side by Side 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 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/cros/network_library.h" 5 #include "chrome/browser/chromeos/cros/network_library.h"
6 6
7 #include <dbus/dbus-glib.h> 7 #include <dbus/dbus-glib.h>
8 #include <dbus/dbus-gtype-specialized.h> 8 #include <dbus/dbus-gtype-specialized.h>
9 #include <glib-object.h> 9 #include <glib-object.h>
10 10
11 #include <algorithm> 11 #include <algorithm>
12 #include <list> 12 #include <list>
13 #include <map> 13 #include <map>
14 #include <set> 14 #include <set>
15 #include <utility> 15 #include <utility>
16 16
17 #include "base/bind.h" 17 #include "base/bind.h"
18 #include "base/i18n/icu_encoding_detection.h" 18 #include "base/i18n/icu_encoding_detection.h"
19 #include "base/i18n/icu_string_conversions.h" 19 #include "base/i18n/icu_string_conversions.h"
20 #include "base/i18n/time_formatting.h" 20 #include "base/i18n/time_formatting.h"
21 #include "base/json/json_writer.h" // for debug output only.
21 #include "base/metrics/histogram.h" 22 #include "base/metrics/histogram.h"
22 #include "base/stl_util.h" 23 #include "base/stl_util.h"
23 #include "base/string_number_conversions.h" 24 #include "base/string_number_conversions.h"
24 #include "base/string_tokenizer.h" 25 #include "base/string_tokenizer.h"
25 #include "base/string_util.h" 26 #include "base/string_util.h"
26 #include "base/stringprintf.h" 27 #include "base/stringprintf.h"
27 #include "base/utf_string_conversion_utils.h" 28 #include "base/utf_string_conversion_utils.h"
28 #include "base/utf_string_conversions.h" 29 #include "base/utf_string_conversions.h"
29 #include "base/values.h" 30 #include "base/values.h"
30 #include "chrome/browser/chromeos/cros_settings.h" 31 #include "chrome/browser/chromeos/cros_settings.h"
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 case Value::TYPE_BINARY: 309 case Value::TYPE_BINARY:
309 case Value::TYPE_LIST: 310 case Value::TYPE_LIST:
310 // Other Value types shouldn't be passed through this mechanism. 311 // Other Value types shouldn't be passed through this mechanism.
311 NOTREACHED() << "Unconverted Value of type: " << value->GetType(); 312 NOTREACHED() << "Unconverted Value of type: " << value->GetType();
312 return new GValue(); 313 return new GValue();
313 } 314 }
314 NOTREACHED() << "Value conversion failed, type: " << value->GetType(); 315 NOTREACHED() << "Value conversion failed, type: " << value->GetType();
315 return new GValue(); 316 return new GValue();
316 } 317 }
317 318
319 GHashTable* ConvertDictionaryValueToGValueMap(const DictionaryValue* dict) {
320 GHashTable* ghash =
321 g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
322 for (DictionaryValue::key_iterator it = dict->begin_keys();
323 it != dict->end_keys(); ++it) {
324 std::string key = *it;
325 Value* val = NULL;
326 if (dict->Get(key, &val)) {
327 g_hash_table_insert(ghash,
328 g_strdup(const_cast<char*>(key.c_str())),
329 ConvertValueToGValue(val));
330 }
331 }
332 return ghash;
333 }
334
318 } // namespace 335 } // namespace
319 336
320 //////////////////////////////////////////////////////////////////////////////// 337 ////////////////////////////////////////////////////////////////////////////////
321 // FoundCellularNetwork 338 // FoundCellularNetwork
322 339
323 FoundCellularNetwork::FoundCellularNetwork() {} 340 FoundCellularNetwork::FoundCellularNetwork() {}
324 341
325 FoundCellularNetwork::~FoundCellularNetwork() {} 342 FoundCellularNetwork::~FoundCellularNetwork() {}
326 343
327 //////////////////////////////////////////////////////////////////////////////// 344 ////////////////////////////////////////////////////////////////////////////////
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 auto_connect_(false), 390 auto_connect_(false),
374 save_credentials_(false), 391 save_credentials_(false),
375 priority_order_(0), 392 priority_order_(0),
376 added_(false), 393 added_(false),
377 notify_failure_(false), 394 notify_failure_(false),
378 profile_type_(PROFILE_NONE), 395 profile_type_(PROFILE_NONE),
379 service_path_(service_path), 396 service_path_(service_path),
380 type_(type) { 397 type_(type) {
381 } 398 }
382 399
383 Network::~Network() {} 400 Network::~Network() {
401 for (PropertyMap::const_iterator props = property_map_.begin();
402 props != property_map_.end(); ++props) {
403 delete props->second;
404 }
405 }
384 406
385 void Network::SetNetworkParser(NetworkParser* parser) { 407 void Network::SetNetworkParser(NetworkParser* parser) {
386 network_parser_.reset(parser); 408 network_parser_.reset(parser);
387 } 409 }
388 410
411 void Network::UpdatePropertyMap(PropertyIndex index, const base::Value& value) {
412 // Add the property to property_map_. Delete previous value if necessary.
413 Value*& entry = property_map_[index];
414 delete entry;
415 entry = value.DeepCopy();
416 if (VLOG_IS_ON(2)) {
417 std::string value_json;
418 base::JSONWriter::Write(&value, true, &value_json);
419 VLOG(2) << "Updated property map on network: "
420 << unique_id() << "[" << index << "] = " << value_json;
421 }
422 }
423
389 void Network::SetState(ConnectionState new_state) { 424 void Network::SetState(ConnectionState new_state) {
390 if (new_state == state_) 425 if (new_state == state_)
391 return; 426 return;
392 ConnectionState old_state = state_; 427 ConnectionState old_state = state_;
393 state_ = new_state; 428 state_ = new_state;
394 if (!IsConnectingState(new_state)) 429 if (!IsConnectingState(new_state))
395 set_connection_started(false); 430 set_connection_started(false);
396 if (new_state == STATE_FAILURE) { 431 if (new_state == STATE_FAILURE) {
397 if (old_state != STATE_UNKNOWN && 432 if (old_state != STATE_UNKNOWN &&
398 old_state != STATE_IDLE) { 433 old_state != STATE_IDLE) {
(...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 // Called from ConnectToWifiNetwork. 1491 // Called from ConnectToWifiNetwork.
1457 // Calls ConnectToWifiNetworkUsingConnectData if network request succeeds. 1492 // Calls ConnectToWifiNetworkUsingConnectData if network request succeeds.
1458 virtual void CallRequestWifiNetworkAndConnect( 1493 virtual void CallRequestWifiNetworkAndConnect(
1459 const std::string& ssid, ConnectionSecurity security) = 0; 1494 const std::string& ssid, ConnectionSecurity security) = 0;
1460 // Called from ConnectToVirtualNetwork*. 1495 // Called from ConnectToVirtualNetwork*.
1461 // Calls ConnectToVirtualNetworkUsingConnectData if network request succeeds. 1496 // Calls ConnectToVirtualNetworkUsingConnectData if network request succeeds.
1462 virtual void CallRequestVirtualNetworkAndConnect( 1497 virtual void CallRequestVirtualNetworkAndConnect(
1463 const std::string& service_name, 1498 const std::string& service_name,
1464 const std::string& server_hostname, 1499 const std::string& server_hostname,
1465 ProviderType provider_type) = 0; 1500 ProviderType provider_type) = 0;
1501 // Call to configure a wifi service. The identifier is either a service_path
1502 // or a GUID. |info| is a dictionary of property values.
1503 virtual void CallConfigureService(const std::string& identifier,
1504 const DictionaryValue* info) = 0;
1466 // Called from NetworkConnectStart. 1505 // Called from NetworkConnectStart.
1467 // Calls NetworkConnectCompleted when the connection attept completes. 1506 // Calls NetworkConnectCompleted when the connection attept completes.
1468 virtual void CallConnectToNetwork(Network* network) = 0; 1507 virtual void CallConnectToNetwork(Network* network) = 0;
1469 // Called from DeleteRememberedNetwork. 1508 // Called from DeleteRememberedNetwork.
1470 virtual void CallDeleteRememberedNetwork( 1509 virtual void CallDeleteRememberedNetwork(
1471 const std::string& profile_path, const std::string& service_path) = 0; 1510 const std::string& profile_path, const std::string& service_path) = 0;
1472 1511
1473 // Called from Enable*NetworkDevice. 1512 // Called from Enable*NetworkDevice.
1474 // Asynchronously enables or disables the specified device type. 1513 // Asynchronously enables or disables the specified device type.
1475 virtual void CallEnableNetworkDeviceType( 1514 virtual void CallEnableNetworkDeviceType(
(...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after
2784 for (int i = 0; i < parser.GetCertificatesSize(); i++) { 2823 for (int i = 0; i < parser.GetCertificatesSize(); i++) {
2785 // Insert each of the available certs into the certificate DB. 2824 // Insert each of the available certs into the certificate DB.
2786 if (!parser.ParseCertificate(i)) { 2825 if (!parser.ParseCertificate(i)) {
2787 DLOG(WARNING) << "Cannot parse certificate in ONC file"; 2826 DLOG(WARNING) << "Cannot parse certificate in ONC file";
2788 return false; 2827 return false;
2789 } 2828 }
2790 } 2829 }
2791 2830
2792 for (int i = 0; i < parser.GetNetworkConfigsSize(); i++) { 2831 for (int i = 0; i < parser.GetNetworkConfigsSize(); i++) {
2793 // Parse Open Network Configuration blob into a temporary Network object. 2832 // Parse Open Network Configuration blob into a temporary Network object.
2794 Network* network = parser.ParseNetwork(i); 2833 scoped_ptr<Network> network(parser.ParseNetwork(i));
2795 if (!network) { 2834 if (!network.get()) {
2796 DLOG(WARNING) << "Cannot parse networks in ONC file"; 2835 DLOG(WARNING) << "Cannot parse networks in ONC file";
2797 return false; 2836 return false;
2798 } 2837 }
2799 2838
2800 // TODO(chocobo): Pass parsed network values to flimflam update network. 2839 DictionaryValue dict;
2840 for (Network::PropertyMap::const_iterator props =
2841 network->property_map_.begin();
2842 props != network->property_map_.end(); ++props) {
2843 std::string key =
2844 NativeNetworkParser::property_mapper()->GetKey(props->first);
2845 if (!key.empty())
2846 dict.SetWithoutPathExpansion(key, props->second->DeepCopy());
2847 }
2848
2849 CallConfigureService(network->unique_id(), &dict);
2801 } 2850 }
2802 return parser.GetNetworkConfigsSize() != 0; 2851 return parser.GetNetworkConfigsSize() != 0;
2803 } 2852 }
2804 2853
2805 //////////////////////////////////////////////////////////////////////////// 2854 ////////////////////////////////////////////////////////////////////////////
2806 // Testing functions. 2855 // Testing functions.
2807 2856
2808 bool NetworkLibraryImplBase::SetActiveNetwork( 2857 bool NetworkLibraryImplBase::SetActiveNetwork(
2809 ConnectionType type, const std::string& service_path) { 2858 ConnectionType type, const std::string& service_path) {
2810 Network* network = NULL; 2859 Network* network = NULL;
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
3289 ////////////////////////////////////////////////////////////////////////////// 3338 //////////////////////////////////////////////////////////////////////////////
3290 // NetworkLibraryImplBase implementation. 3339 // NetworkLibraryImplBase implementation.
3291 3340
3292 virtual void MonitorNetworkStart(const std::string& service_path) OVERRIDE; 3341 virtual void MonitorNetworkStart(const std::string& service_path) OVERRIDE;
3293 virtual void MonitorNetworkStop(const std::string& service_path) OVERRIDE; 3342 virtual void MonitorNetworkStop(const std::string& service_path) OVERRIDE;
3294 virtual void MonitorNetworkDeviceStart( 3343 virtual void MonitorNetworkDeviceStart(
3295 const std::string& device_path) OVERRIDE; 3344 const std::string& device_path) OVERRIDE;
3296 virtual void MonitorNetworkDeviceStop( 3345 virtual void MonitorNetworkDeviceStop(
3297 const std::string& device_path) OVERRIDE; 3346 const std::string& device_path) OVERRIDE;
3298 3347
3348 virtual void CallConfigureService(const std::string& identifier,
3349 const DictionaryValue* info) OVERRIDE;
3299 virtual void CallConnectToNetwork(Network* network) OVERRIDE; 3350 virtual void CallConnectToNetwork(Network* network) OVERRIDE;
3300 virtual void CallRequestWifiNetworkAndConnect( 3351 virtual void CallRequestWifiNetworkAndConnect(
3301 const std::string& ssid, ConnectionSecurity security) OVERRIDE; 3352 const std::string& ssid, ConnectionSecurity security) OVERRIDE;
3302 virtual void CallRequestVirtualNetworkAndConnect( 3353 virtual void CallRequestVirtualNetworkAndConnect(
3303 const std::string& service_name, 3354 const std::string& service_name,
3304 const std::string& server_hostname, 3355 const std::string& server_hostname,
3305 ProviderType provider_type) OVERRIDE; 3356 ProviderType provider_type) OVERRIDE;
3306 virtual void CallDeleteRememberedNetwork( 3357 virtual void CallDeleteRememberedNetwork(
3307 const std::string& profile_path, 3358 const std::string& profile_path,
3308 const std::string& service_path) OVERRIDE; 3359 const std::string& service_path) OVERRIDE;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3352 static void PinOperationCallback(void* object, 3403 static void PinOperationCallback(void* object,
3353 const char* path, 3404 const char* path,
3354 NetworkMethodErrorType error, 3405 NetworkMethodErrorType error,
3355 const char* error_message); 3406 const char* error_message);
3356 3407
3357 static void CellularRegisterCallback(void* object, 3408 static void CellularRegisterCallback(void* object,
3358 const char* path, 3409 const char* path,
3359 NetworkMethodErrorType error, 3410 NetworkMethodErrorType error,
3360 const char* error_message); 3411 const char* error_message);
3361 3412
3413 static void ConfigureServiceCallback(void* object,
3414 const char* service_path,
3415 NetworkMethodErrorType error,
3416 const char* error_message);
3417
3362 static void NetworkConnectCallback(void* object, 3418 static void NetworkConnectCallback(void* object,
3363 const char* service_path, 3419 const char* service_path,
3364 NetworkMethodErrorType error, 3420 NetworkMethodErrorType error,
3365 const char* error_message); 3421 const char* error_message);
3366 3422
3367 static void WifiServiceUpdateAndConnect( 3423 static void WifiServiceUpdateAndConnect(
3368 void* object, const char* service_path, GHashTable* ghash); 3424 void* object, const char* service_path, GHashTable* ghash);
3369 static void VPNServiceUpdateAndConnect( 3425 static void VPNServiceUpdateAndConnect(
3370 void* object, const char* service_path, GHashTable* ghash); 3426 void* object, const char* service_path, GHashTable* ghash);
3371 3427
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
3610 chromeos::RequestNetworkDeviceProperties(path.c_str(), 3666 chromeos::RequestNetworkDeviceProperties(path.c_str(),
3611 &NetworkDeviceUpdate, 3667 &NetworkDeviceUpdate,
3612 this); 3668 this);
3613 } 3669 }
3614 } 3670 }
3615 3671
3616 ///////////////////////////////////////////////////////////////////////////// 3672 /////////////////////////////////////////////////////////////////////////////
3617 // NetworkLibraryImplBase connect implementation. 3673 // NetworkLibraryImplBase connect implementation.
3618 3674
3619 // static callback 3675 // static callback
3676 void NetworkLibraryImplCros::ConfigureServiceCallback(
3677 void* object,
3678 const char* service_path,
3679 NetworkMethodErrorType error,
3680 const char* error_message) {
3681 if (error != NETWORK_METHOD_ERROR_NONE) {
3682 LOG(WARNING) << "Error from ConfigureService callback for: "
3683 << service_path
3684 << " Error: " << error << " Message: " << error_message;
3685 }
3686 }
3687
3688 void NetworkLibraryImplCros::CallConfigureService(const std::string& identifier,
3689 const DictionaryValue* info) {
3690 GHashTable* ghash = ConvertDictionaryValueToGValueMap(info);
3691 chromeos::ConfigureService(identifier.c_str(), ghash,
3692 ConfigureServiceCallback, this);
3693 }
3694
3695 // static callback
3620 void NetworkLibraryImplCros::NetworkConnectCallback( 3696 void NetworkLibraryImplCros::NetworkConnectCallback(
3621 void* object, 3697 void* object,
3622 const char* service_path, 3698 const char* service_path,
3623 NetworkMethodErrorType error, 3699 NetworkMethodErrorType error,
3624 const char* error_message) { 3700 const char* error_message) {
3625 DCHECK(CrosLibrary::Get()->libcros_loaded()); 3701 DCHECK(CrosLibrary::Get()->libcros_loaded());
3626 NetworkConnectStatus status; 3702 NetworkConnectStatus status;
3627 if (error == NETWORK_METHOD_ERROR_NONE) { 3703 if (error == NETWORK_METHOD_ERROR_NONE) {
3628 status = CONNECT_SUCCESS; 3704 status = CONNECT_SUCCESS;
3629 } else { 3705 } else {
(...skipping 1066 matching lines...) Expand 10 before | Expand all | Expand 10 after
4696 4772
4697 // NetworkLibraryImplBase implementation. 4773 // NetworkLibraryImplBase implementation.
4698 4774
4699 virtual void MonitorNetworkStart(const std::string& service_path) OVERRIDE {} 4775 virtual void MonitorNetworkStart(const std::string& service_path) OVERRIDE {}
4700 virtual void MonitorNetworkStop(const std::string& service_path) OVERRIDE {} 4776 virtual void MonitorNetworkStop(const std::string& service_path) OVERRIDE {}
4701 virtual void MonitorNetworkDeviceStart( 4777 virtual void MonitorNetworkDeviceStart(
4702 const std::string& device_path) OVERRIDE {} 4778 const std::string& device_path) OVERRIDE {}
4703 virtual void MonitorNetworkDeviceStop( 4779 virtual void MonitorNetworkDeviceStop(
4704 const std::string& device_path) OVERRIDE {} 4780 const std::string& device_path) OVERRIDE {}
4705 4781
4782 virtual void CallConfigureService(const std::string& identifier,
4783 const DictionaryValue* info) OVERRIDE {}
4706 virtual void CallConnectToNetwork(Network* network) OVERRIDE; 4784 virtual void CallConnectToNetwork(Network* network) OVERRIDE;
4707 virtual void CallRequestWifiNetworkAndConnect( 4785 virtual void CallRequestWifiNetworkAndConnect(
4708 const std::string& ssid, ConnectionSecurity security) OVERRIDE; 4786 const std::string& ssid, ConnectionSecurity security) OVERRIDE;
4709 virtual void CallRequestVirtualNetworkAndConnect( 4787 virtual void CallRequestVirtualNetworkAndConnect(
4710 const std::string& service_name, 4788 const std::string& service_name,
4711 const std::string& server_hostname, 4789 const std::string& server_hostname,
4712 ProviderType provider_type) OVERRIDE; 4790 ProviderType provider_type) OVERRIDE;
4713 4791
4714 virtual void CallDeleteRememberedNetwork( 4792 virtual void CallDeleteRememberedNetwork(
4715 const std::string& profile_path, 4793 const std::string& profile_path,
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
4912 vpn3->set_provider_type(PROVIDER_TYPE_OPEN_VPN); 4990 vpn3->set_provider_type(PROVIDER_TYPE_OPEN_VPN);
4913 AddStubNetwork(vpn3, PROFILE_USER); 4991 AddStubNetwork(vpn3, PROFILE_USER);
4914 4992
4915 wifi_scanning_ = false; 4993 wifi_scanning_ = false;
4916 offline_mode_ = false; 4994 offline_mode_ = false;
4917 4995
4918 // Ensure our active network is connected and vice versa, otherwise our 4996 // Ensure our active network is connected and vice versa, otherwise our
4919 // autotest browser_tests sometimes conclude the device is offline. 4997 // autotest browser_tests sometimes conclude the device is offline.
4920 CHECK(active_network()->connected()); 4998 CHECK(active_network()->connected());
4921 CHECK(connected_network()->is_active()); 4999 CHECK(connected_network()->is_active());
5000
5001 std::string test_blob(
5002 "{"
5003 " \"NetworkConfigurations\": ["
5004 " {"
5005 " \"GUID\": \"guid\","
5006 " \"Type\": \"WiFi\","
5007 " \"WiFi\": {"
5008 " \"Security\": \"WEP\","
5009 " \"SSID\": \"MySSID\","
5010 " }"
5011 " }"
5012 " ],"
5013 " \"Certificates\": []"
5014 "}");
5015 LoadOncNetworks(test_blob);
4922 } 5016 }
4923 5017
4924 //////////////////////////////////////////////////////////////////////////// 5018 ////////////////////////////////////////////////////////////////////////////
4925 // NetworkLibraryImplStub private methods. 5019 // NetworkLibraryImplStub private methods.
4926 5020
4927 void NetworkLibraryImplStub::AddStubNetwork( 5021 void NetworkLibraryImplStub::AddStubNetwork(
4928 Network* network, NetworkProfileType profile_type) { 5022 Network* network, NetworkProfileType profile_type) {
4929 network->priority_order_ = network_priority_order_++; 5023 network->priority_order_ = network_priority_order_++;
4930 network->CalculateUniqueId(); 5024 network->CalculateUniqueId();
4931 if (!network->unique_id().empty()) 5025 if (!network->unique_id().empty())
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
5159 return impl; 5253 return impl;
5160 } 5254 }
5161 5255
5162 ///////////////////////////////////////////////////////////////////////////// 5256 /////////////////////////////////////////////////////////////////////////////
5163 5257
5164 } // namespace chromeos 5258 } // namespace chromeos
5165 5259
5166 // Allows InvokeLater without adding refcounting. This class is a Singleton and 5260 // Allows InvokeLater without adding refcounting. This class is a Singleton and
5167 // won't be deleted until its last InvokeLater is run. 5261 // won't be deleted until its last InvokeLater is run.
5168 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase); 5262 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase);
OLDNEW
« 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