summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-04 17:31:16 +0000
committerzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-04 17:31:16 +0000
commit05f06dfc585db57c544bca907e74d5e6d4ca6982 (patch)
tree7883e1182168ebbcb5dc3bb9bcac514a1ad77dd6
parenta1b99ebf12b47406407e50ced6f28130dfa753fe (diff)
downloadchromium_src-05f06dfc585db57c544bca907e74d5e6d4ca6982.zip
chromium_src-05f06dfc585db57c544bca907e74d5e6d4ca6982.tar.gz
chromium_src-05f06dfc585db57c544bca907e74d5e6d4ca6982.tar.bz2
Submitting http://codereview.chromium.org/4116010 on behalf of jglasgow@chromium.org:
Change the libcros API for cellular data plans keep all memory allocation and deletion within libcros. BUG=chromium-os:8297 TEST=ad hoc Review URL: http://codereview.chromium.org/4270004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65073 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/boot_times_loader.cc3
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc40
-rw-r--r--chrome/browser/chromeos/cros/network_library.h43
-rw-r--r--chrome/browser/chromeos/dom_ui/internet_options_handler.cc23
-rw-r--r--chrome/browser/chromeos/network_message_observer.cc6
5 files changed, 66 insertions, 49 deletions
diff --git a/chrome/browser/chromeos/boot_times_loader.cc b/chrome/browser/chromeos/boot_times_loader.cc
index 62b958c..5fc7414 100644
--- a/chrome/browser/chromeos/boot_times_loader.cc
+++ b/chrome/browser/chromeos/boot_times_loader.cc
@@ -17,6 +17,7 @@
#include "base/string_util.h"
#include "base/stringprintf.h"
#include "base/thread.h"
+#include "base/thread_restrictions.h"
#include "base/time.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_thread.h"
@@ -281,7 +282,7 @@ BootTimesLoader::Stats BootTimesLoader::GetCurrentStats() {
const FilePath kProcUptime("/proc/uptime");
const FilePath kDiskStat("/sys/block/sda/stat");
Stats stats;
-
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
file_util::ReadFileToString(kProcUptime, &stats.uptime);
file_util::ReadFileToString(kDiskStat, &stats.disk);
return stats;
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc
index feb4d49..645279f 100644
--- a/chrome/browser/chromeos/cros/network_library.cc
+++ b/chrome/browser/chromeos/cros/network_library.cc
@@ -284,6 +284,9 @@ CellularNetwork::CellularNetwork(const ServiceInfo* service)
type_ = TYPE_CELLULAR;
}
+CellularNetwork::~CellularNetwork() {
+}
+
bool CellularNetwork::StartActivation() const {
if (!EnsureCrosLoaded())
return false;
@@ -323,14 +326,15 @@ bool CellularNetwork::is_gsm() const {
CellularNetwork::DataLeft CellularNetwork::data_left() const {
if (data_plans_.empty())
return DATA_NORMAL;
- CellularDataPlan plan = data_plans_[0];
+ const CellularDataPlan& plan(data_plans_[0]);
if (plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED) {
- int64 remaining = plan.plan_end_time - plan.update_time;
- if (remaining <= 0)
+ base::TimeDelta remaining = plan.plan_end_time - plan.update_time;
+ if (remaining <= base::TimeDelta::FromSeconds(0))
return DATA_NONE;
- else if (remaining <= kCellularDataVeryLowSecs)
+ else if (remaining <=
+ base::TimeDelta::FromSeconds(kCellularDataVeryLowSecs))
return DATA_VERY_LOW;
- else if (remaining <= kCellularDataLowSecs)
+ else if (remaining <= base::TimeDelta::FromSeconds(kCellularDataLowSecs))
return DATA_LOW;
else
return DATA_NORMAL;
@@ -996,7 +1000,7 @@ class NetworkLibraryImpl : public NetworkLibrary {
if (network->cellular_network()->service_path()
.compare(modem_service_path) == 0) {
if (dataplan != NULL) {
- network->UpdateCellularDataPlan(*dataplan);
+ network->UpdateCellularDataPlan(dataplan);
}
}
}
@@ -1128,23 +1132,6 @@ class NetworkLibraryImpl : public NetworkLibrary {
enabled_devices_ = devices;
connected_devices_ = devices;
offline_mode_ = false;
-
- chromeos::CellularDataPlan test_plan;
- test_plan.plan_name = "Fake plan";
- test_plan.data_bytes_used = 5LL * 1024LL * 1024LL * 1024LL;
- test_plan.plan_start_time =
- (base::Time::Now() - base::TimeDelta::FromDays(15)).ToInternalValue() /
- base::Time::kMicrosecondsPerSecond;
- test_plan.plan_end_time =
- (base::Time::Now() + base::TimeDelta::FromDays(12)).ToInternalValue() /
- base::Time::kMicrosecondsPerSecond;
- test_plan.plan_data_bytes = 20LL * 1024LL * 1024LL * 1024LL;
- test_plan.plan_type = CELLULAR_DATA_PLAN_METERED_PAID;
- test_plan.update_time = base::Time::Now().ToInternalValue() /
- base::Time::kMicrosecondsPerSecond;
- chromeos::CellularDataPlanList test_plans;
- test_plans.push_back(test_plan);
- cellular_->SetDataPlans(test_plans);
}
void UpdateSystemInfo() {
@@ -1275,9 +1262,10 @@ class NetworkLibraryImpl : public NetworkLibrary {
// If new cellular, then update data plan list.
if (cellular_networks_[i]->service_path() !=
prev_cellular_service_path) {
- CellularDataPlanList list;
- RetrieveCellularDataPlans(cellular_->service_path().c_str(), &list);
+ CellularDataPlanList* list = RetrieveCellularDataPlans(
+ cellular_->service_path().c_str());
UpdateCellularDataPlan(list);
+ FreeCellularDataPlanList(list);
}
break; // There is only one connected or connecting cellular network.
}
@@ -1292,7 +1280,7 @@ class NetworkLibraryImpl : public NetworkLibrary {
FreeSystemInfo(system);
}
- void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) {
+ void UpdateCellularDataPlan(const CellularDataPlanList* data_plans) {
DCHECK(cellular_);
cellular_->SetDataPlans(data_plans);
NotifyCellularDataPlanChanged();
diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h
index 65574ed..a54aba4 100644
--- a/chrome/browser/chromeos/cros/network_library.h
+++ b/chrome/browser/chromeos/cros/network_library.h
@@ -135,13 +135,40 @@ class WirelessNetwork : public Network {
favorite_(false) {}
explicit WirelessNetwork(const WirelessNetwork& network);
explicit WirelessNetwork(const ServiceInfo* service);
-
+ virtual ~WirelessNetwork() {}
std::string name_;
int strength_;
bool auto_connect_;
bool favorite_;
};
+class CellularDataPlan {
+ public:
+ CellularDataPlan() :
+ plan_name("Unknown"),
+ plan_type(CELLULAR_DATA_PLAN_UNLIMITED),
+ plan_data_bytes(0),
+ data_bytes_used(0) { }
+ explicit CellularDataPlan(const CellularDataPlanInfo &plan) :
+ plan_name(plan.plan_name?plan.plan_name:""),
+ plan_type(plan.plan_type),
+ update_time(base::Time::FromInternalValue(plan.update_time)),
+ plan_start_time(base::Time::FromInternalValue(plan.plan_start_time)),
+ plan_end_time(base::Time::FromInternalValue(plan.plan_end_time)),
+ plan_data_bytes(plan.plan_data_bytes),
+ data_bytes_used(plan.data_bytes_used) { }
+
+ std::string plan_name;
+ CellularDataPlanType plan_type;
+ base::Time update_time;
+ base::Time plan_start_time;
+ base::Time plan_end_time;
+ int64 plan_data_bytes;
+ int64 data_bytes_used;
+};
+
+typedef std::vector<CellularDataPlan> CellularDataPlanVector;
+
class CellularNetwork : public WirelessNetwork {
public:
enum DataLeft {
@@ -154,7 +181,7 @@ class CellularNetwork : public WirelessNetwork {
CellularNetwork();
explicit CellularNetwork(const CellularNetwork& network);
explicit CellularNetwork(const ServiceInfo* service);
-
+ virtual ~CellularNetwork();
// Starts device activation process. Returns false if the device state does
// not permit activation.
bool StartActivation() const;
@@ -192,12 +219,16 @@ class CellularNetwork : public WirelessNetwork {
// WirelessNetwork overrides.
virtual void Clear();
- const CellularDataPlanList& GetDataPlans() const {
+ const CellularDataPlanVector& GetDataPlans() const {
return data_plans_;
}
- void SetDataPlans(const CellularDataPlanList& data_plans) {
- data_plans_ = data_plans;
+ void SetDataPlans(const CellularDataPlanList* data_plan_list) {
+ data_plans_.clear();
+ for (size_t i = 0; i < data_plan_list->plans_size; i++) {
+ const CellularDataPlanInfo* info(data_plan_list->GetCellularDataPlan(i));
+ data_plans_.push_back(CellularDataPlan(*info));
+ }
}
// Return a string representation of network technology.
std::string GetNetworkTechnologyString() const;
@@ -233,7 +264,7 @@ class CellularNetwork : public WirelessNetwork {
std::string hardware_revision_;
std::string last_update_;
unsigned int prl_version_;
- CellularDataPlanList data_plans_;
+ CellularDataPlanVector data_plans_;
};
class WifiNetwork : public WirelessNetwork {
diff --git a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
index d3b1972..f9989aa 100644
--- a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
+++ b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
@@ -380,10 +380,10 @@ void InternetOptionsHandler::CellularDataPlanChanged(
chromeos::CellularNetwork* cellular = obj->cellular_network();
if (!cellular)
return;
- const chromeos::CellularDataPlanList& plans = cellular->GetDataPlans();
+ const chromeos::CellularDataPlanVector& plans = cellular->GetDataPlans();
DictionaryValue connection_plans;
ListValue* plan_list = new ListValue();
- for (chromeos::CellularDataPlanList::const_iterator iter = plans.begin();
+ for (chromeos::CellularDataPlanVector::const_iterator iter = plans.begin();
iter != plans.end();
++iter) {
plan_list->Append(CellularDataPlanToDictionary(*iter));
@@ -410,9 +410,8 @@ DictionaryValue* InternetOptionsHandler::CellularDataPlanToDictionary(
case chromeos::CELLULAR_DATA_PLAN_UNLIMITED: {
description = l10n_util::GetStringFUTF16(
IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_PURCHASE_UNLIMITED_DATA,
- WideToUTF16(base::TimeFormatFriendlyDate(
- base::Time::FromInternalValue(plan.plan_start_time *
- base::Time::kMicrosecondsPerSecond))));
+ WideToUTF16(base::TimeFormatFriendlyDate(plan.plan_start_time)));
+
remaining = l10n_util::GetStringUTF16(
IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_UNLIMITED);
break;
@@ -424,8 +423,7 @@ DictionaryValue* InternetOptionsHandler::CellularDataPlanToDictionary(
GetByteDisplayUnits(plan.plan_data_bytes),
true),
WideToUTF16(base::TimeFormatFriendlyDate(
- base::Time::FromInternalValue(plan.plan_start_time *
- base::Time::kMicrosecondsPerSecond))));
+ plan.plan_start_time)));
remaining = FormatBytes(plan.plan_data_bytes - plan.data_bytes_used,
GetByteDisplayUnits(plan.plan_data_bytes - plan.data_bytes_used),
true);
@@ -438,8 +436,7 @@ DictionaryValue* InternetOptionsHandler::CellularDataPlanToDictionary(
GetByteDisplayUnits(plan.plan_data_bytes),
true),
WideToUTF16(base::TimeFormatFriendlyDate(
- base::Time::FromInternalValue(plan.plan_start_time *
- base::Time::kMicrosecondsPerSecond))));
+ plan.plan_start_time)));
remaining = FormatBytes(plan.plan_data_bytes - plan.data_bytes_used,
GetByteDisplayUnits(plan.plan_data_bytes - plan.data_bytes_used),
true);
@@ -447,10 +444,7 @@ DictionaryValue* InternetOptionsHandler::CellularDataPlanToDictionary(
}
}
string16 expiration = TimeFormat::TimeRemaining(
- base::TimeDelta::FromSeconds(
- plan.plan_end_time - (base::Time::Now().ToInternalValue() /
- base::Time::kMicrosecondsPerSecond)));
-
+ plan.plan_end_time - base::Time::Now());
plan_dict->SetString("name", plan.plan_name);
plan_dict->SetString("planSummary", description);
plan_dict->SetString("dataRemaining", remaining);
@@ -463,7 +457,8 @@ string16 InternetOptionsHandler::GetPlanWarning(
const chromeos::CellularDataPlan& plan) {
if (plan.plan_type == chromeos::CELLULAR_DATA_PLAN_UNLIMITED) {
// Time based plan. Show nearing expiration and data expiration.
- int64 time_left = plan.plan_end_time - plan.update_time;
+ int64 time_left = base::TimeDelta(
+ plan.plan_end_time - plan.update_time).InSeconds();
if (time_left <= 0) {
return l10n_util::GetStringFUTF16(
IDS_NETWORK_MINUTES_REMAINING_MESSAGE, ASCIIToUTF16("0"));
diff --git a/chrome/browser/chromeos/network_message_observer.cc b/chrome/browser/chromeos/network_message_observer.cc
index 92bc85a..db3a82f 100644
--- a/chrome/browser/chromeos/network_message_observer.cc
+++ b/chrome/browser/chromeos/network_message_observer.cc
@@ -155,7 +155,7 @@ void NetworkMessageObserver::CellularDataPlanChanged(NetworkLibrary* obj) {
if (!cellular)
return;
// Active plan is the first one in the list. Use empty one if none found.
- const CellularDataPlanList& plans = cellular->GetDataPlans();
+ const CellularDataPlanVector& 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.
@@ -204,8 +204,10 @@ void NetworkMessageObserver::CellularDataPlanChanged(NetworkLibrary* obj) {
int message = plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED ?
IDS_NETWORK_MINUTES_REMAINING_MESSAGE :
IDS_NETWORK_DATA_REMAINING_MESSAGE;
+ int64 remaining_minutes =
+ base::TimeDelta(plan.plan_end_time - plan.update_time).InMinutes();
int64 remaining = plan.plan_type == CELLULAR_DATA_PLAN_UNLIMITED ?
- (plan.plan_end_time - plan.update_time) / 60 :
+ remaining_minutes :
(plan.plan_data_bytes - plan.data_bytes_used) / (1024 * 1024);
notification_low_data_.Show(l10n_util::GetStringFUTF16(
message, UTF8ToUTF16(base::Int64ToString(remaining))),