OLD | NEW |
---|---|
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 <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 2658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2669 const std::string& user_passphrase) OVERRIDE; | 2669 const std::string& user_passphrase) OVERRIDE; |
2670 | 2670 |
2671 // virtual DisconnectFromNetwork implemented in derived classes. | 2671 // virtual DisconnectFromNetwork implemented in derived classes. |
2672 virtual void ForgetNetwork(const std::string& service_path) OVERRIDE; | 2672 virtual void ForgetNetwork(const std::string& service_path) OVERRIDE; |
2673 virtual void EnableEthernetNetworkDevice(bool enable) OVERRIDE; | 2673 virtual void EnableEthernetNetworkDevice(bool enable) OVERRIDE; |
2674 virtual void EnableWifiNetworkDevice(bool enable) OVERRIDE; | 2674 virtual void EnableWifiNetworkDevice(bool enable) OVERRIDE; |
2675 virtual void EnableCellularNetworkDevice(bool enable) OVERRIDE; | 2675 virtual void EnableCellularNetworkDevice(bool enable) OVERRIDE; |
2676 // virtual EnableOfflineMode implemented in derived classes. | 2676 // virtual EnableOfflineMode implemented in derived classes. |
2677 // virtual GetIPConfigs implemented in derived classes. | 2677 // virtual GetIPConfigs implemented in derived classes. |
2678 // virtual SetIPConfig implemented in derived classes. | 2678 // virtual SetIPConfig implemented in derived classes. |
2679 virtual void SwitchToPreferredNetworkIfAppropriate() OVERRIDE; | |
2679 | 2680 |
2680 protected: | 2681 protected: |
2681 typedef ObserverList<NetworkObserver> NetworkObserverList; | 2682 typedef ObserverList<NetworkObserver> NetworkObserverList; |
2682 typedef std::map<std::string, NetworkObserverList*> NetworkObserverMap; | 2683 typedef std::map<std::string, NetworkObserverList*> NetworkObserverMap; |
2683 | 2684 |
2684 typedef ObserverList<NetworkDeviceObserver> NetworkDeviceObserverList; | 2685 typedef ObserverList<NetworkDeviceObserver> NetworkDeviceObserverList; |
2685 typedef std::map<std::string, NetworkDeviceObserverList*> | 2686 typedef std::map<std::string, NetworkDeviceObserverList*> |
2686 NetworkDeviceObserverMap; | 2687 NetworkDeviceObserverMap; |
2687 | 2688 |
2688 typedef std::map<std::string, Network*> NetworkMap; | 2689 typedef std::map<std::string, Network*> NetworkMap; |
(...skipping 1048 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3737 return; | 3738 return; |
3738 CallEnableNetworkDeviceType(TYPE_WIFI, enable); | 3739 CallEnableNetworkDeviceType(TYPE_WIFI, enable); |
3739 } | 3740 } |
3740 | 3741 |
3741 void NetworkLibraryImplBase::EnableCellularNetworkDevice(bool enable) { | 3742 void NetworkLibraryImplBase::EnableCellularNetworkDevice(bool enable) { |
3742 if (is_locked_) | 3743 if (is_locked_) |
3743 return; | 3744 return; |
3744 CallEnableNetworkDeviceType(TYPE_CELLULAR, enable); | 3745 CallEnableNetworkDeviceType(TYPE_CELLULAR, enable); |
3745 } | 3746 } |
3746 | 3747 |
3748 void NetworkLibraryImplBase::SwitchToPreferredNetworkIfAppropriate() { | |
3749 // If current network (if any) is not preferred, check network service list to | |
3750 // see if the first not connected network is preferred and set to autoconnect. | |
3751 // If so, connect to it. | |
3752 if (active_wifi_ == NULL || active_wifi_->preferred()) | |
stevenjb
2011/08/03 21:37:52
This assumes that flimflam would always auto-conne
Charlie Lee
2011/08/03 22:22:59
Good advice. Thanks.
On 2011/08/03 21:37:52, Stev
| |
3753 return; | |
3754 if (wifi_networks_.empty()) | |
stevenjb
2011/08/03 21:37:52
nit: Extra check here isn't really necessary.
Charlie Lee
2011/08/03 22:22:59
Done.
| |
3755 return; | |
3756 for (WifiNetworkVector::const_iterator it = wifi_networks_.begin(); | |
3757 it != wifi_networks_.end(); ++it) { | |
3758 WifiNetwork* wifi = *it; | |
3759 if (wifi->connected()) // Skip connected networks. | |
stevenjb
2011/08/03 21:37:52
|| connecting() (I don't think we can currently be
Charlie Lee
2011/08/03 22:22:59
Done.
| |
3760 continue; | |
3761 if (!wifi->preferred()) // All preferred networks are sorted in front. | |
3762 break; | |
3763 if (wifi->auto_connect()) { | |
3764 ConnectToWifiNetwork(wifi); | |
3765 break; | |
3766 } | |
3767 } | |
3768 } | |
3769 | |
3770 | |
3747 //////////////////////////////////////////////////////////////////////////// | 3771 //////////////////////////////////////////////////////////////////////////// |
3748 // Network list management functions. | 3772 // Network list management functions. |
3749 | 3773 |
3750 // Note: sometimes flimflam still returns networks when the device type is | 3774 // Note: sometimes flimflam still returns networks when the device type is |
3751 // disabled. Always check the appropriate enabled() state before adding | 3775 // disabled. Always check the appropriate enabled() state before adding |
3752 // networks to a list or setting an active network so that we do not show them | 3776 // networks to a list or setting an active network so that we do not show them |
3753 // in the UI. | 3777 // in the UI. |
3754 | 3778 |
3755 // This relies on services being requested from flimflam in priority order, | 3779 // This relies on services being requested from flimflam in priority order, |
3756 // and the updates getting processed and received in order. | 3780 // and the updates getting processed and received in order. |
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4957 case PROPERTY_INDEX_OFFLINE_MODE: { | 4981 case PROPERTY_INDEX_OFFLINE_MODE: { |
4958 DCHECK_EQ(value->GetType(), Value::TYPE_BOOLEAN); | 4982 DCHECK_EQ(value->GetType(), Value::TYPE_BOOLEAN); |
4959 value->GetAsBoolean(&offline_mode_); | 4983 value->GetAsBoolean(&offline_mode_); |
4960 NotifyNetworkManagerChanged(false); // Not forced. | 4984 NotifyNetworkManagerChanged(false); // Not forced. |
4961 break; | 4985 break; |
4962 } | 4986 } |
4963 case PROPERTY_INDEX_ACTIVE_PROFILE: { | 4987 case PROPERTY_INDEX_ACTIVE_PROFILE: { |
4964 DCHECK_EQ(value->GetType(), Value::TYPE_STRING); | 4988 DCHECK_EQ(value->GetType(), Value::TYPE_STRING); |
4965 value->GetAsString(&active_profile_path_); | 4989 value->GetAsString(&active_profile_path_); |
4966 VLOG(1) << "Active Profile: " << active_profile_path_; | 4990 VLOG(1) << "Active Profile: " << active_profile_path_; |
4991 if (active_profile_path_ != kSharedProfilePath) | |
stevenjb
2011/08/03 21:37:52
We should check on == kUserProfilePath; there has
| |
4992 SwitchToPreferredNetworkIfAppropriate(); | |
4967 break; | 4993 break; |
4968 } | 4994 } |
4969 case PROPERTY_INDEX_PROFILES: { | 4995 case PROPERTY_INDEX_PROFILES: { |
4970 DCHECK_EQ(value->GetType(), Value::TYPE_LIST); | 4996 DCHECK_EQ(value->GetType(), Value::TYPE_LIST); |
4971 const ListValue* vlist = static_cast<const ListValue*>(value); | 4997 const ListValue* vlist = static_cast<const ListValue*>(value); |
4972 UpdateRememberedNetworks(vlist); | 4998 UpdateRememberedNetworks(vlist); |
4973 RequestRememberedNetworksUpdate(); | 4999 RequestRememberedNetworksUpdate(); |
4974 break; | 5000 break; |
4975 } | 5001 } |
4976 case PROPERTY_INDEX_SERVICES: { | 5002 case PROPERTY_INDEX_SERVICES: { |
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5847 return network_library; | 5873 return network_library; |
5848 } | 5874 } |
5849 | 5875 |
5850 ///////////////////////////////////////////////////////////////////////////// | 5876 ///////////////////////////////////////////////////////////////////////////// |
5851 | 5877 |
5852 } // namespace chromeos | 5878 } // namespace chromeos |
5853 | 5879 |
5854 // Allows InvokeLater without adding refcounting. This class is a Singleton and | 5880 // Allows InvokeLater without adding refcounting. This class is a Singleton and |
5855 // won't be deleted until it's last InvokeLater is run. | 5881 // won't be deleted until it's last InvokeLater is run. |
5856 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase); | 5882 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase); |
OLD | NEW |