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

Unified Diff: chromeos/dbus/shill_manager_client.cc

Issue 11192024: Add chromeos::NetworkStateManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address feedback from hashimoto Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chromeos/dbus/shill_manager_client.cc
diff --git a/chromeos/dbus/shill_manager_client.cc b/chromeos/dbus/shill_manager_client.cc
index caffa301c7f37cc542d5b165084e2f354873575a..da61c3306750d2e74ef47691ddc0a5e1c9121977 100644
--- a/chromeos/dbus/shill_manager_client.cc
+++ b/chromeos/dbus/shill_manager_client.cc
@@ -172,13 +172,24 @@ class ShillManagerClientImpl : public ShillManagerClient {
DISALLOW_COPY_AND_ASSIGN(ShillManagerClientImpl);
};
+// Used to compare values for finding entries to erase in a ListValue.
+// (ListValue only implements a const_iterator version of Find).
+struct ValueEquals {
+ ValueEquals(const Value* first) : first_(first) {}
+ bool operator ()(const Value* second) const {
+ return first_->Equals(second);
+ }
+ const Value* first_;
+};
+
// A stub implementation of ShillManagerClient.
// Implemented: Stub devices and services for NetworkStateManager tests.
// Implemented: Stub cellular device entry for SMS tests.
class ShillManagerClientStubImpl : public ShillManagerClient,
public ShillManagerClient::TestInterface {
public:
- ShillManagerClientStubImpl() : weak_ptr_factory_(this) {
+ ShillManagerClientStubImpl()
+ : weak_ptr_factory_(this) {
SetDefaultProperties();
}
@@ -220,13 +231,9 @@ class ShillManagerClientStubImpl : public ShillManagerClient,
const base::Closure& callback,
const ErrorCallback& error_callback) OVERRIDE {
MessageLoop::current()->PostTask(FROM_HERE, callback);
- const int kScanDelaySeconds = 3;
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
- weak_ptr_factory_.GetWeakPtr(),
- flimflam::kServicesProperty),
- base::TimeDelta::FromSeconds(kScanDelaySeconds));
+ const int kScanDelayMilliseconds = 3000;
+ CallNotifyObserversPropertyChanged(
+ flimflam::kServicesProperty, kScanDelayMilliseconds);
}
virtual void EnableTechnology(
@@ -243,11 +250,8 @@ class ShillManagerClientStubImpl : public ShillManagerClient,
}
MessageLoop::current()->PostTask(FROM_HERE, callback);
enabled_list->AppendIfNotPresent(new base::StringValue(type));
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
- weak_ptr_factory_.GetWeakPtr(),
- flimflam::kEnabledTechnologiesProperty));
+ CallNotifyObserversPropertyChanged(
+ flimflam::kEnabledTechnologiesProperty, 0);
}
virtual void DisableTechnology(
@@ -265,11 +269,8 @@ class ShillManagerClientStubImpl : public ShillManagerClient,
MessageLoop::current()->PostTask(FROM_HERE, callback);
base::StringValue type_value(type);
enabled_list->Remove(type_value, NULL);
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
- weak_ptr_factory_.GetWeakPtr(),
- flimflam::kEnabledTechnologiesProperty));
+ CallNotifyObserversPropertyChanged(
+ flimflam::kEnabledTechnologiesProperty, 0);
}
virtual void ConfigureService(
@@ -294,49 +295,87 @@ class ShillManagerClientStubImpl : public ShillManagerClient,
// ShillManagerClient::TestInterface overrides.
virtual void AddDevice(const std::string& device_path) OVERRIDE {
- GetListProperty(flimflam::kDevicesProperty)->Append(
- base::Value::CreateStringValue(device_path));
+ if (GetListProperty(flimflam::kDevicesProperty)->AppendIfNotPresent(
+ base::Value::CreateStringValue(device_path))) {
+ CallNotifyObserversPropertyChanged(flimflam::kDevicesProperty, 0);
+ }
}
virtual void RemoveDevice(const std::string& device_path) OVERRIDE {
base::StringValue device_path_value(device_path);
- GetListProperty(flimflam::kDevicesProperty)->Remove(
- device_path_value, NULL);
+ if (GetListProperty(flimflam::kDevicesProperty)->Remove(
+ device_path_value, NULL)) {
+ CallNotifyObserversPropertyChanged(flimflam::kDevicesProperty, 0);
+ }
}
virtual void AddService(const std::string& service_path,
bool add_to_watch_list) OVERRIDE {
- GetListProperty(flimflam::kServicesProperty)->Append(
- base::Value::CreateStringValue(service_path));
- if (add_to_watch_list) {
- GetListProperty(flimflam::kServiceWatchListProperty)->Append(
- base::Value::CreateStringValue(service_path));
+ if (GetListProperty(flimflam::kServicesProperty)->AppendIfNotPresent(
+ base::Value::CreateStringValue(service_path))) {
+ CallNotifyObserversPropertyChanged(flimflam::kServicesProperty, 0);
}
+ if (add_to_watch_list)
+ AddServiceToWatchList(service_path);
+ }
+
+ virtual void AddServiceAtIndex(const std::string& service_path,
+ size_t index,
+ bool add_to_watch_list) OVERRIDE {
+ base::StringValue path_value(service_path);
+ base::ListValue* service_list =
+ GetListProperty(flimflam::kServicesProperty);
+ base::ListValue::iterator iter =
+ std::find_if(service_list->begin(), service_list->end(),
+ ValueEquals(&path_value));
+ service_list->Find(path_value);
+ if (iter != service_list->end())
+ service_list->Erase(iter, NULL);
+ service_list->Insert(index, path_value.DeepCopy());
+ CallNotifyObserversPropertyChanged(flimflam::kServicesProperty, 0);
+ if (add_to_watch_list)
+ AddServiceToWatchList(service_path);
}
virtual void RemoveService(const std::string& service_path) OVERRIDE {
base::StringValue service_path_value(service_path);
- GetListProperty(flimflam::kServicesProperty)->Remove(
- service_path_value, NULL);
- GetListProperty(flimflam::kServiceWatchListProperty)->Remove(
- service_path_value, NULL);
+ if (GetListProperty(flimflam::kServicesProperty)->Remove(
+ service_path_value, NULL)) {
+ CallNotifyObserversPropertyChanged(flimflam::kServicesProperty, 0);
+ }
+ if (GetListProperty(flimflam::kServiceWatchListProperty)->Remove(
+ service_path_value, NULL)) {
+ CallNotifyObserversPropertyChanged(
+ flimflam::kServiceWatchListProperty, 0);
+ }
}
virtual void AddTechnology(const std::string& type, bool enabled) OVERRIDE {
- GetListProperty(flimflam::kAvailableTechnologiesProperty)->Append(
- base::Value::CreateStringValue(type));
- if (enabled) {
- GetListProperty(flimflam::kEnabledTechnologiesProperty)->Append(
- base::Value::CreateStringValue(type));
+ if (GetListProperty(flimflam::kAvailableTechnologiesProperty)->
+ AppendIfNotPresent(base::Value::CreateStringValue(type))) {
+ CallNotifyObserversPropertyChanged(
+ flimflam::kAvailableTechnologiesProperty, 0);
+ }
+ if (enabled &&
+ GetListProperty(flimflam::kEnabledTechnologiesProperty)->
+ AppendIfNotPresent(base::Value::CreateStringValue(type))) {
+ CallNotifyObserversPropertyChanged(
+ flimflam::kEnabledTechnologiesProperty, 0);
}
}
virtual void RemoveTechnology(const std::string& type) OVERRIDE {
base::StringValue type_value(type);
- GetListProperty(flimflam::kAvailableTechnologiesProperty)->Remove(
- type_value, NULL);
- GetListProperty(flimflam::kEnabledTechnologiesProperty)->Remove(
- type_value, NULL);
+ if (GetListProperty(flimflam::kAvailableTechnologiesProperty)->Remove(
+ type_value, NULL)) {
+ CallNotifyObserversPropertyChanged(
+ flimflam::kAvailableTechnologiesProperty, 0);
+ }
+ if (GetListProperty(flimflam::kEnabledTechnologiesProperty)->Remove(
+ type_value, NULL)) {
+ CallNotifyObserversPropertyChanged(
+ flimflam::kEnabledTechnologiesProperty, 0);
+ }
}
virtual void ClearProperties() OVERRIDE {
@@ -344,6 +383,15 @@ class ShillManagerClientStubImpl : public ShillManagerClient,
}
private:
+ void AddServiceToWatchList(const std::string& service_path) {
+ if (GetListProperty(
+ flimflam::kServiceWatchListProperty)->AppendIfNotPresent(
+ base::Value::CreateStringValue(service_path))) {
+ CallNotifyObserversPropertyChanged(
+ flimflam::kServiceWatchListProperty, 0);
+ }
+ }
+
void SetDefaultProperties() {
// Stub Devices, Note: names match Device stub map.
AddDevice("stub_wifi_device1");
@@ -365,6 +413,20 @@ class ShillManagerClientStubImpl : public ShillManagerClient,
callback.Run(DBUS_METHOD_CALL_SUCCESS, stub_properties_);
}
+ void CallNotifyObserversPropertyChanged(const std::string& property,
+ int delay_ms) {
+ // Avoid unnecessary delayed task if we have no observers (e.g. during
+ // initial setup).
+ if (observer_list_.size() == 0)
+ return;
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
+ weak_ptr_factory_.GetWeakPtr(),
+ property),
+ base::TimeDelta::FromMilliseconds(delay_ms));
+ }
+
void NotifyObserversPropertyChanged(const std::string& property) {
base::Value* value = NULL;
if (!stub_properties_.GetWithoutPathExpansion(property, &value)) {

Powered by Google App Engine
This is Rietveld 408576698