Index: chrome/browser/chromeos/network_message_observer.cc |
=================================================================== |
--- chrome/browser/chromeos/network_message_observer.cc (revision 64441) |
+++ chrome/browser/chromeos/network_message_observer.cc (working copy) |
@@ -6,6 +6,7 @@ |
#include "app/l10n_util.h" |
#include "base/callback.h" |
+#include "base/stl_util-inl.h" |
#include "base/string_number_conversions.h" |
#include "base/utf_string_conversions.h" |
#include "chrome/browser/browser.h" |
@@ -42,6 +43,8 @@ |
notification_connection_error_.Hide(); |
notification_low_data_.Hide(); |
notification_no_data_.Hide(); |
+ STLDeleteValues(&cellular_networks_); |
+ STLDeleteValues(&wifi_networks_); |
} |
void NetworkMessageObserver::CreateModalPopup(views::WindowDelegate* view) { |
@@ -71,24 +74,24 @@ |
// Check to see if we have any newly failed wifi network. |
for (WifiNetworkVector::const_iterator it = wifi_networks.begin(); |
it < wifi_networks.end(); it++) { |
- const WifiNetwork& wifi = *it; |
- if (wifi.failed()) { |
+ const WifiNetwork* wifi = *it; |
+ if (wifi->failed()) { |
ServicePathWifiMap::iterator iter = |
- wifi_networks_.find(wifi.service_path()); |
+ wifi_networks_.find(wifi->service_path()); |
// If the network did not previously exist, then don't do anything. |
// For example, if the user travels to a location and finds a service |
// that has previously failed, we don't want to show a notification. |
if (iter == wifi_networks_.end()) |
continue; |
- const WifiNetwork& wifi_old = iter->second; |
+ const WifiNetwork* wifi_old = iter->second; |
// If this network was in a failed state previously, then it's not new. |
- if (wifi_old.failed()) |
+ if (wifi_old->failed()) |
continue; |
// Display login box again for bad_passphrase and bad_wepkey errors. |
- if (wifi.error() == ERROR_BAD_PASSPHRASE || |
- wifi.error() == ERROR_BAD_WEPKEY) { |
+ if (wifi->error() == ERROR_BAD_PASSPHRASE || |
+ wifi->error() == ERROR_BAD_WEPKEY) { |
// The NetworkConfigView will show the appropriate error message. |
view = new NetworkConfigView(wifi, true); |
// There should only be one wifi network that failed to connect. |
@@ -101,31 +104,35 @@ |
// We only do this if we were trying to make a new connection. |
// So if a previously connected network got disconnected for any reason, |
// we don't display notification. |
- if (wifi_old.connecting()) { |
- new_failed_network = wifi.name(); |
+ if (wifi_old->connecting()) { |
+ new_failed_network = wifi->name(); |
// Like above, there should only be one newly failed network. |
break; |
} |
} |
// If we find any network connecting, we hide the error notification. |
- if (wifi.connecting()) { |
+ if (wifi->connecting()) { |
notification_connection_error_.Hide(); |
} |
} |
// Refresh stored networks. |
+ STLDeleteValues(&wifi_networks_); |
wifi_networks_.clear(); |
for (WifiNetworkVector::const_iterator it = wifi_networks.begin(); |
it < wifi_networks.end(); it++) { |
- const WifiNetwork& wifi = *it; |
- wifi_networks_[wifi.service_path()] = wifi; |
+ const WifiNetwork* wifi = *it; |
+ wifi_networks_[wifi->service_path()] = new WifiNetwork(*wifi); |
} |
+ |
+ STLDeleteValues(&cellular_networks_); |
cellular_networks_.clear(); |
for (CellularNetworkVector::const_iterator it = cellular_networks.begin(); |
it < cellular_networks.end(); it++) { |
- const CellularNetwork& cellular = *it; |
- cellular_networks_[cellular.service_path()] = cellular; |
+ const CellularNetwork* cellular = *it; |
+ cellular_networks_[cellular->service_path()] = |
+ new CellularNetwork(*cellular); |
} |
// Show connection error notification if necessary. |
@@ -144,15 +151,17 @@ |
} |
void NetworkMessageObserver::CellularDataPlanChanged(NetworkLibrary* obj) { |
- const CellularNetwork& cellular = obj->cellular_network(); |
+ const CellularNetwork* cellular = obj->cellular_network(); |
+ if (!cellular) |
+ return; |
// Active plan is the first one in the list. Use empty one if none found. |
- const CellularDataPlanList& plans = cellular.GetDataPlans(); |
+ const CellularDataPlanList& plans = cellular->GetDataPlans(); |
CellularDataPlan plan = plans.empty() ? CellularDataPlan() : plans[0]; |
// If connected cellular network changed, or data plan is different, then |
// it's a new network. Then hide all previous notifications. |
bool new_plan = false; |
- if (cellular.service_path() != cellular_service_path_) { |
- cellular_service_path_ = cellular.service_path(); |
+ if (cellular->service_path() != cellular_service_path_) { |
+ cellular_service_path_ = cellular->service_path(); |
new_plan = true; |
} else if (plan.plan_name != cellular_data_plan_.plan_name || |
plan.plan_type != cellular_data_plan_.plan_type) { |
@@ -180,7 +189,7 @@ |
} |
if (plan.plan_type != CELLULAR_DATA_PLAN_UNKNOWN) { |
- if (cellular.data_left() == CellularNetwork::DATA_NONE) { |
+ if (cellular->data_left() == CellularNetwork::DATA_NONE) { |
notification_low_data_.Hide(); |
int message = plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED ? |
IDS_NETWORK_MINUTES_REMAINING_MESSAGE : |
@@ -190,7 +199,7 @@ |
l10n_util::GetStringUTF16(IDS_NETWORK_PURCHASE_MORE_MESSAGE), |
NewCallback(this, &NetworkMessageObserver::MobileSetup), |
false, false); |
- } else if (cellular.data_left() == CellularNetwork::DATA_VERY_LOW) { |
+ } else if (cellular->data_left() == CellularNetwork::DATA_VERY_LOW) { |
notification_no_data_.Hide(); |
int message = plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED ? |
IDS_NETWORK_MINUTES_REMAINING_MESSAGE : |