summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 16:28:21 +0000
committerstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 16:28:21 +0000
commiteeba404f477708927b258392bd959ce925fa11d9 (patch)
tree9a6d93b7a7eab5d3b920152a076d65b34d953197
parent906e2965b4ef7a553c0ff3222a63cf62d828205b (diff)
downloadchromium_src-eeba404f477708927b258392bd959ce925fa11d9.zip
chromium_src-eeba404f477708927b258392bd959ce925fa11d9.tar.gz
chromium_src-eeba404f477708927b258392bd959ce925fa11d9.tar.bz2
Fix NetworkLibrary memory leaks and warnings.
BUG=chromium:89684 TEST=Run linux_chromeos_valgrind and make sure there are no leaks in network_library.cc Review URL: http://codereview.chromium.org/7468035 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93653 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc130
-rw-r--r--tools/valgrind/memcheck/suppressions.txt34
2 files changed, 72 insertions, 92 deletions
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc
index 903347e..b70610d 100644
--- a/chrome/browser/chromeos/cros/network_library.cc
+++ b/chrome/browser/chromeos/cros/network_library.cc
@@ -102,7 +102,7 @@ const int kRecentPlanPaymentHours = 6;
const int kDefaultSimUnlockRetriesCount = 999;
// Format of the Carrier ID: <carrier name> (<carrier country>).
-const char* kCarrierIdFormat = "%s (%s)";
+const char kCarrierIdFormat[] = "%s (%s)";
// Type of a pending SIM operation.
enum SimOperationType {
@@ -115,20 +115,26 @@ enum SimOperationType {
// D-Bus interface string constants.
-// Flimflam property names.
-const char kSecurityProperty[] = "Security";
-const char kPassphraseProperty[] = "Passphrase";
-const char kIdentityProperty[] = "Identity";
-const char kPassphraseRequiredProperty[] = "PassphraseRequired";
-const char kSaveCredentialsProperty[] = "SaveCredentials";
-const char kProfilesProperty[] = "Profiles";
-const char kServicesProperty[] = "Services";
-const char kServiceWatchListProperty[] = "ServiceWatchList";
+// Flimflam manager properties.
const char kAvailableTechnologiesProperty[] = "AvailableTechnologies";
const char kEnabledTechnologiesProperty[] = "EnabledTechnologies";
const char kConnectedTechnologiesProperty[] = "ConnectedTechnologies";
const char kDefaultTechnologyProperty[] = "DefaultTechnology";
const char kOfflineModeProperty[] = "OfflineMode";
+const char kActiveProfileProperty[] = "ActiveProfile";
+const char kProfilesProperty[] = "Profiles";
+const char kServicesProperty[] = "Services";
+const char kServiceWatchListProperty[] = "ServiceWatchList";
+const char kDevicesProperty[] = "Devices";
+const char kPortalURLProperty[] = "PortalURL";
+const char kCheckPortalListProperty[] = "CheckPortalList";
+
+// Flimflam service properties.
+const char kSecurityProperty[] = "Security";
+const char kPassphraseProperty[] = "Passphrase";
+const char kIdentityProperty[] = "Identity";
+const char kPassphraseRequiredProperty[] = "PassphraseRequired";
+const char kSaveCredentialsProperty[] = "SaveCredentials";
const char kSignalStrengthProperty[] = "Strength";
const char kNameProperty[] = "Name";
const char kStateProperty[] = "State";
@@ -158,12 +164,10 @@ const char kAutoConnectProperty[] = "AutoConnect";
const char kIsActiveProperty[] = "IsActive";
const char kModeProperty[] = "Mode";
const char kErrorProperty[] = "Error";
-const char kActiveProfileProperty[] = "ActiveProfile";
const char kEntriesProperty[] = "Entries";
-const char kDevicesProperty[] = "Devices";
const char kProviderProperty[] = "Provider";
const char kHostProperty[] = "Host";
-const char* kProxyConfigProperty = "ProxyConfig";
+const char kProxyConfigProperty[] = "ProxyConfig";
// Flimflam property names for SIMLock status.
const char kSIMLockStatusProperty[] = "Cellular.SIMLockStatus";
@@ -458,29 +462,30 @@ enum PropertyIndex {
PROPERTY_INDEX_CELLULAR_APN,
PROPERTY_INDEX_CELLULAR_APN_LIST,
PROPERTY_INDEX_CELLULAR_LAST_GOOD_APN,
+ PROPERTY_INDEX_CHECK_PORTAL_LIST,
PROPERTY_INDEX_CONNECTABLE,
PROPERTY_INDEX_CONNECTED_TECHNOLOGIES,
PROPERTY_INDEX_CONNECTIVITY_STATE,
PROPERTY_INDEX_DEFAULT_TECHNOLOGY,
PROPERTY_INDEX_DEVICE,
PROPERTY_INDEX_DEVICES,
- PROPERTY_INDEX_EAP_IDENTITY,
- PROPERTY_INDEX_EAP_METHOD,
- PROPERTY_INDEX_EAP_PHASE_2_AUTH,
PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY,
- PROPERTY_INDEX_EAP_CLIENT_CERT,
+ PROPERTY_INDEX_EAP_CA_CERT,
+ PROPERTY_INDEX_EAP_CA_CERT_ID,
+ PROPERTY_INDEX_EAP_CA_CERT_NSS,
PROPERTY_INDEX_EAP_CERT_ID,
+ PROPERTY_INDEX_EAP_CLIENT_CERT,
PROPERTY_INDEX_EAP_CLIENT_CERT_NSS,
+ PROPERTY_INDEX_EAP_IDENTITY,
+ PROPERTY_INDEX_EAP_KEY_ID,
+ PROPERTY_INDEX_EAP_KEY_MGMT,
+ PROPERTY_INDEX_EAP_METHOD,
+ PROPERTY_INDEX_EAP_PASSWORD,
+ PROPERTY_INDEX_EAP_PHASE_2_AUTH,
+ PROPERTY_INDEX_EAP_PIN,
PROPERTY_INDEX_EAP_PRIVATE_KEY,
PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD,
- PROPERTY_INDEX_EAP_KEY_ID,
- PROPERTY_INDEX_EAP_CA_CERT,
- PROPERTY_INDEX_EAP_CA_CERT_ID,
- PROPERTY_INDEX_EAP_CA_CERT_NSS,
PROPERTY_INDEX_EAP_USE_SYSTEM_CAS,
- PROPERTY_INDEX_EAP_PIN,
- PROPERTY_INDEX_EAP_PASSWORD,
- PROPERTY_INDEX_EAP_KEY_MGMT,
PROPERTY_INDEX_ENABLED_TECHNOLOGIES,
PROPERTY_INDEX_ERROR,
PROPERTY_INDEX_ESN,
@@ -508,14 +513,15 @@ enum PropertyIndex {
PROPERTY_INDEX_MODE,
PROPERTY_INDEX_MODEL_ID,
PROPERTY_INDEX_NAME,
- PROPERTY_INDEX_NETWORK_TECHNOLOGY,
PROPERTY_INDEX_NETWORKS,
+ PROPERTY_INDEX_NETWORK_TECHNOLOGY,
PROPERTY_INDEX_OFFLINE_MODE,
PROPERTY_INDEX_OPERATOR_CODE,
PROPERTY_INDEX_OPERATOR_NAME,
PROPERTY_INDEX_PASSPHRASE,
PROPERTY_INDEX_PASSPHRASE_REQUIRED,
PROPERTY_INDEX_PAYMENT_URL,
+ PROPERTY_INDEX_PORTAL_URL,
PROPERTY_INDEX_POWERED,
PROPERTY_INDEX_PRL_VERSION,
PROPERTY_INDEX_PROFILE,
@@ -545,38 +551,39 @@ enum PropertyIndex {
PROPERTY_INDEX_WIFI_PHY_MODE,
};
-StringToEnum<PropertyIndex>::Pair property_index_table[] = {
+StringToEnum<PropertyIndex>::Pair property_index_table[] = {
{ kActivationStateProperty, PROPERTY_INDEX_ACTIVATION_STATE },
{ kActiveProfileProperty, PROPERTY_INDEX_ACTIVE_PROFILE },
{ kAutoConnectProperty, PROPERTY_INDEX_AUTO_CONNECT },
{ kAvailableTechnologiesProperty, PROPERTY_INDEX_AVAILABLE_TECHNOLOGIES },
+ { kCarrierProperty, PROPERTY_INDEX_CARRIER },
{ kCellularAllowRoamingProperty, PROPERTY_INDEX_CELLULAR_ALLOW_ROAMING },
- { kCellularApnProperty, PROPERTY_INDEX_CELLULAR_APN },
{ kCellularApnListProperty, PROPERTY_INDEX_CELLULAR_APN_LIST },
+ { kCellularApnProperty, PROPERTY_INDEX_CELLULAR_APN },
{ kCellularLastGoodApnProperty, PROPERTY_INDEX_CELLULAR_LAST_GOOD_APN },
- { kCarrierProperty, PROPERTY_INDEX_CARRIER },
+ { kCheckPortalListProperty, PROPERTY_INDEX_CHECK_PORTAL_LIST },
{ kConnectableProperty, PROPERTY_INDEX_CONNECTABLE },
{ kConnectedTechnologiesProperty, PROPERTY_INDEX_CONNECTED_TECHNOLOGIES },
{ kDefaultTechnologyProperty, PROPERTY_INDEX_DEFAULT_TECHNOLOGY },
{ kDeviceProperty, PROPERTY_INDEX_DEVICE },
{ kDevicesProperty, PROPERTY_INDEX_DEVICES },
- { kEapIdentityProperty, PROPERTY_INDEX_EAP_IDENTITY },
- { kEapMethodProperty, PROPERTY_INDEX_EAP_METHOD },
- { kEapPhase2AuthProperty, PROPERTY_INDEX_EAP_PHASE_2_AUTH },
{ kEapAnonymousIdentityProperty, PROPERTY_INDEX_EAP_ANONYMOUS_IDENTITY },
- { kEapClientCertProperty, PROPERTY_INDEX_EAP_CLIENT_CERT },
+ { kEapCaCertIDProperty, PROPERTY_INDEX_EAP_CA_CERT_ID },
+ { kEapCaCertNssProperty, PROPERTY_INDEX_EAP_CA_CERT_NSS },
+ { kEapCaCertProperty, PROPERTY_INDEX_EAP_CA_CERT },
{ kEapCertIDProperty, PROPERTY_INDEX_EAP_CERT_ID },
{ kEapClientCertNssProperty, PROPERTY_INDEX_EAP_CLIENT_CERT_NSS },
- { kEapPrivateKeyProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY },
- { kEapPrivateKeyPasswordProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD },
+ { kEapClientCertProperty, PROPERTY_INDEX_EAP_CLIENT_CERT },
+ { kEapIdentityProperty, PROPERTY_INDEX_EAP_IDENTITY },
{ kEapKeyIDProperty, PROPERTY_INDEX_EAP_KEY_ID },
- { kEapCaCertProperty, PROPERTY_INDEX_EAP_CA_CERT },
- { kEapCaCertIDProperty, PROPERTY_INDEX_EAP_CA_CERT_ID },
- { kEapCaCertNssProperty, PROPERTY_INDEX_EAP_CA_CERT_NSS },
- { kEapUseSystemCAsProperty, PROPERTY_INDEX_EAP_USE_SYSTEM_CAS },
- { kEapPinProperty, PROPERTY_INDEX_EAP_PIN },
- { kEapPasswordProperty, PROPERTY_INDEX_EAP_PASSWORD },
{ kEapKeyMgmtProperty, PROPERTY_INDEX_EAP_KEY_MGMT },
+ { kEapMethodProperty, PROPERTY_INDEX_EAP_METHOD },
+ { kEapPasswordProperty, PROPERTY_INDEX_EAP_PASSWORD },
+ { kEapPhase2AuthProperty, PROPERTY_INDEX_EAP_PHASE_2_AUTH },
+ { kEapPinProperty, PROPERTY_INDEX_EAP_PIN },
+ { kEapPrivateKeyPasswordProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY_PASSWORD },
+ { kEapPrivateKeyProperty, PROPERTY_INDEX_EAP_PRIVATE_KEY },
+ { kEapUseSystemCAsProperty, PROPERTY_INDEX_EAP_USE_SYSTEM_CAS },
{ kEnabledTechnologiesProperty, PROPERTY_INDEX_ENABLED_TECHNOLOGIES },
{ kErrorProperty, PROPERTY_INDEX_ERROR },
{ kEsnProperty, PROPERTY_INDEX_ESN },
@@ -613,12 +620,14 @@ StringToEnum<PropertyIndex>::Pair property_index_table[] = {
{ kPassphraseProperty, PROPERTY_INDEX_PASSPHRASE },
{ kPassphraseRequiredProperty, PROPERTY_INDEX_PASSPHRASE_REQUIRED },
{ kPaymentURLProperty, PROPERTY_INDEX_PAYMENT_URL },
+ { kPortalURLProperty, PROPERTY_INDEX_PORTAL_URL },
{ kPoweredProperty, PROPERTY_INDEX_POWERED },
{ kProfileProperty, PROPERTY_INDEX_PROFILE },
{ kProfilesProperty, PROPERTY_INDEX_PROFILES },
{ kProviderProperty, PROPERTY_INDEX_PROVIDER },
{ kProxyConfigProperty, PROPERTY_INDEX_PROXY_CONFIG },
{ kRoamingStateProperty, PROPERTY_INDEX_ROAMING_STATE },
+ { kSIMLockStatusProperty, PROPERTY_INDEX_SIM_LOCK },
{ kSaveCredentialsProperty, PROPERTY_INDEX_SAVE_CREDENTIALS },
{ kScanningProperty, PROPERTY_INDEX_SCANNING },
{ kSecurityProperty, PROPERTY_INDEX_SECURITY },
@@ -627,7 +636,6 @@ StringToEnum<PropertyIndex>::Pair property_index_table[] = {
{ kServicesProperty, PROPERTY_INDEX_SERVICES },
{ kServingOperatorProperty, PROPERTY_INDEX_SERVING_OPERATOR },
{ kSignalStrengthProperty, PROPERTY_INDEX_SIGNAL_STRENGTH },
- { kSIMLockStatusProperty, PROPERTY_INDEX_SIM_LOCK },
{ kStateProperty, PROPERTY_INDEX_STATE },
{ kSupportNetworkScanProperty, PROPERTY_INDEX_SUPPORT_NETWORK_SCAN },
{ kTechnologyFamilyProperty, PROPERTY_INDEX_TECHNOLOGY_FAMILY },
@@ -2661,7 +2669,7 @@ class NetworkLibraryImplBase : public NetworkLibrary {
typedef ObserverList<NetworkDeviceObserver> NetworkDeviceObserverList;
typedef std::map<std::string, NetworkDeviceObserverList*>
- NetworkDeviceObserverMap;
+ NetworkDeviceObserverMap;
typedef std::map<std::string, Network*> NetworkMap;
typedef std::map<std::string, int> PriorityMap;
@@ -2732,6 +2740,7 @@ class NetworkLibraryImplBase : public NetworkLibrary {
void DeleteNetworks();
void DeleteRememberedNetworks();
void DeleteDevice(const std::string& device_path);
+ void DeleteDeviceFromDeviceObserversMap(const std::string& device_path);
// Profile management functions.
void SetProfileType(Network* network, NetworkProfileType type);
@@ -2888,6 +2897,9 @@ NetworkLibraryImplBase::~NetworkLibraryImplBase() {
DeleteNetworks();
DeleteRememberedNetworks();
STLDeleteValues(&data_plan_map_);
+ STLDeleteValues(&device_map_);
+ STLDeleteValues(&network_device_observers_);
+ STLDeleteValues(&network_observers_);
}
//////////////////////////////////////////////////////////////////////////////
@@ -2977,6 +2989,17 @@ void NetworkLibraryImplBase::RemoveNetworkDeviceObserver(
}
}
+void NetworkLibraryImplBase::DeleteDeviceFromDeviceObserversMap(
+ const std::string& device_path) {
+ // Delete all device observers associated with this device.
+ NetworkDeviceObserverMap::iterator map_iter =
+ network_device_observers_.find(device_path);
+ if (map_iter != network_device_observers_.end()) {
+ delete map_iter->second;
+ network_device_observers_.erase(map_iter);
+ }
+}
+
//////////////////////////////////////////////////////////////////////////////
void NetworkLibraryImplBase::Lock() {
@@ -3889,6 +3912,7 @@ void NetworkLibraryImplBase::DeleteDevice(const std::string& device_path) {
NetworkDevice* device = found->second;
device_map_.erase(found);
delete device;
+ DeleteDeviceFromDeviceObserversMap(device_path);
}
////////////////////////////////////////////////////////////////////////////
@@ -4212,7 +4236,6 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase {
// NetworkDevice list management functions.
void UpdateNetworkDeviceList(const ListValue* devices);
- void DeleteDeviceFromDeviceObserversMap(const std::string& device_path);
void ParseNetworkDevice(const std::string& device_path,
const DictionaryValue* info);
@@ -4908,8 +4931,12 @@ void NetworkLibraryImplCros::NetworkManagerStatusChanged(
UpdateNetworkDeviceList(vlist);
break;
}
+ case PROPERTY_INDEX_PORTAL_URL:
+ case PROPERTY_INDEX_CHECK_PORTAL_LIST:
+ // Currently we ignore PortalURL and CheckPortalList.
+ break;
default:
- LOG(WARNING) << "Unhandled key: " << key;
+ LOG(WARNING) << "Manager: Unhandled key: " << key;
break;
}
base::TimeDelta delta = base::TimeTicks::Now() - start;
@@ -5362,9 +5389,7 @@ void NetworkLibraryImplCros::NetworkDeviceUpdate(
if (device_path) {
if (!info) {
// device no longer exists.
- std::string device_str(device_path);
- networklib->DeleteDevice(device_str);
- networklib->DeleteDeviceFromDeviceObserversMap(device_str);
+ networklib->DeleteDevice(std::string(device_path));
} else {
DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY);
const DictionaryValue* dict = static_cast<const DictionaryValue*>(info);
@@ -5373,17 +5398,6 @@ void NetworkLibraryImplCros::NetworkDeviceUpdate(
}
}
-void NetworkLibraryImplCros::DeleteDeviceFromDeviceObserversMap(
- const std::string& device_path) {
- // Delete all device observers associated with this device.
- NetworkDeviceObserverMap::iterator map_iter =
- network_device_observers_.find(device_path);
- if (map_iter != network_device_observers_.end()) {
- delete map_iter->second;
- network_device_observers_.erase(map_iter);
- }
-}
-
void NetworkLibraryImplCros::ParseNetworkDevice(
const std::string& device_path, const DictionaryValue* info) {
NetworkDeviceMap::iterator found = device_map_.find(device_path);
diff --git a/tools/valgrind/memcheck/suppressions.txt b/tools/valgrind/memcheck/suppressions.txt
index aa0b2b4..71b0c36 100644
--- a/tools/valgrind/memcheck/suppressions.txt
+++ b/tools/valgrind/memcheck/suppressions.txt
@@ -4096,16 +4096,6 @@
fun:_ZN12browser_sync12SyncerThread16DoSyncSessionJobERKNS0_14SyncSessionJobE
}
{
- bug_79569
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8chromeos18NetworkLibraryImpl12InitTestDataEv
- fun:_ZN8chromeos18NetworkLibraryImplC1Ev
- fun:_ZN8chromeos14NetworkLibrary7GetImplEb
- fun:_ZN8chromeos11CrosLibrary7LibraryINS_14NetworkLibraryEE14GetDefaultImplEb
- fun:_ZN8chromeos11CrosLibrary17GetNetworkLibraryEv
-}
-{
bug_79651
Memcheck:Leak
...
@@ -4872,30 +4862,6 @@
fun:_ZN11MessageLoop21DeferOrRunPendingTaskERKNS_11PendingTaskE
}
{
- bug_89684_a
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8chromeos22NetworkLibraryImplStub4InitEv
- fun:_ZN8chromeos14NetworkLibrary7GetImplEb
- fun:_ZN8chromeos11CrosLibrary7LibraryINS_14NetworkLibraryEE14GetDefaultImplEb
- fun:_ZN8chromeos11CrosLibrary17GetNetworkLibraryEv
-}
-{
- bug_89684_b
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8chromeos22NetworkLibraryImplBase24AddNetworkDeviceObserverERKSsPNS_14NetworkLibrary21NetworkDeviceObserverE
- fun:_ZN8chromeos17NetworkMenuButton28RefreshNetworkDeviceObserverEPNS_14NetworkLibraryE
-}
-{
- bug_89684_c
- Memcheck:Leak
- fun:_Znw*
- fun:_ZN8chromeos22NetworkLibraryImplBase18AddNetworkObserverERKSsPNS_14NetworkLibrary15NetworkObserverE
- fun:_ZN8chromeos22ProxyConfigServiceImpl22OnActiveNetworkChangedEPNS_14NetworkLibraryEPKNS_7NetworkE
- fun:_ZN8chromeos22ProxyConfigServiceImplC1Ev
-}
-{
bug_89785a
Memcheck:Cond
fun:_ZSt9has_facetISt8messagesIcEEbRKSt6locale