Index: chromeos/dbus/fake_shill_manager_client.cc |
diff --git a/chromeos/dbus/fake_shill_manager_client.cc b/chromeos/dbus/fake_shill_manager_client.cc |
index 3b9a02d0a295ad091fb2d51885f75a99c2879de7..2e444414b29cfeb4e563472e83fa361bbfef65ab 100644 |
--- a/chromeos/dbus/fake_shill_manager_client.cc |
+++ b/chromeos/dbus/fake_shill_manager_client.cc |
@@ -64,12 +64,6 @@ void AppendServicesForType( |
properties->GetString(shill::kTypeProperty, &type); |
if (type != match_type) |
continue; |
- if (!technology_enabled) { |
- std::string profile; |
- properties->GetString(shill::kProfileProperty, &profile); |
- if (profile.empty()) |
- continue; |
- } |
bool visible = false; |
if (technology_enabled) |
properties->GetBoolean(shill::kVisibleProperty, &visible); |
@@ -462,16 +456,14 @@ void FakeShillManagerClient::SetManagerProperty(const std::string& key, |
} |
void FakeShillManagerClient::AddManagerService( |
- const std::string& service_path) { |
+ const std::string& service_path, |
+ bool notify_observers) { |
DVLOG(2) << "AddManagerService: " << service_path; |
GetListProperty(shill::kServiceCompleteListProperty)->AppendIfNotPresent( |
base::Value::CreateStringValue(service_path)); |
SortManagerServices(false); |
- CallNotifyObserversPropertyChanged(shill::kServiceCompleteListProperty); |
- // SortManagerServices will add the service to Services if it is visible. |
- const base::ListValue* services = GetListProperty(shill::kServicesProperty); |
- if (services->Find(base::StringValue(service_path)) != services->end()) |
- CallNotifyObserversPropertyChanged(shill::kServicesProperty); |
+ if (notify_observers) |
+ CallNotifyObserversPropertyChanged(shill::kServiceCompleteListProperty); |
} |
void FakeShillManagerClient::RemoveManagerService( |
@@ -481,18 +473,12 @@ void FakeShillManagerClient::RemoveManagerService( |
GetListProperty(shill::kServiceCompleteListProperty)->Remove( |
service_path_value, NULL); |
CallNotifyObserversPropertyChanged(shill::kServiceCompleteListProperty); |
- if (GetListProperty(shill::kServicesProperty)->Remove( |
- service_path_value, NULL)) { |
- CallNotifyObserversPropertyChanged(shill::kServicesProperty); |
- } |
} |
void FakeShillManagerClient::ClearManagerServices() { |
DVLOG(1) << "ClearManagerServices"; |
GetListProperty(shill::kServiceCompleteListProperty)->Clear(); |
- GetListProperty(shill::kServicesProperty)->Clear(); |
CallNotifyObserversPropertyChanged(shill::kServiceCompleteListProperty); |
- CallNotifyObserversPropertyChanged(shill::kServicesProperty); |
} |
void FakeShillManagerClient::ServiceStateChanged( |
@@ -514,8 +500,6 @@ void FakeShillManagerClient::SortManagerServices(bool notify) { |
shill::kTypeWimax, |
shill::kTypeVPN}; |
- base::ListValue* service_list = GetListProperty(shill::kServicesProperty); |
- scoped_ptr<base::ListValue> prev_service_list(service_list->DeepCopy()); |
base::ListValue* complete_list = |
GetListProperty(shill::kServiceCompleteListProperty); |
if (complete_list->empty()) |
@@ -533,26 +517,16 @@ void FakeShillManagerClient::SortManagerServices(bool notify) { |
&inactive_services, |
&disabled_services); |
} |
- service_list->Clear(); |
complete_list->Clear(); |
- for (size_t i = 0; i < active_services.size(); ++i) { |
+ for (size_t i = 0; i < active_services.size(); ++i) |
complete_list->AppendString(active_services[i]); |
- service_list->AppendString(active_services[i]); |
- } |
- for (size_t i = 0; i < inactive_services.size(); ++i) { |
+ for (size_t i = 0; i < inactive_services.size(); ++i) |
complete_list->AppendString(inactive_services[i]); |
- service_list->AppendString(inactive_services[i]); |
- } |
- for (size_t i = 0; i < disabled_services.size(); ++i) { |
+ for (size_t i = 0; i < disabled_services.size(); ++i) |
complete_list->AppendString(disabled_services[i]); |
- } |
- if (notify) { |
- if (!service_list->Equals(prev_service_list.get())) |
- CallNotifyObserversPropertyChanged(shill::kServicesProperty); |
- if (!complete_list->Equals(prev_complete_list.get())) |
- CallNotifyObserversPropertyChanged(shill::kServiceCompleteListProperty); |
- } |
+ if (notify && !complete_list->Equals(prev_complete_list.get())) |
+ CallNotifyObserversPropertyChanged(shill::kServiceCompleteListProperty); |
// Set the first active service as the Default service. |
std::string new_default_service; |
@@ -815,6 +789,9 @@ void FakeShillManagerClient::PassStubProperties( |
const DictionaryValueCallback& callback) const { |
scoped_ptr<base::DictionaryValue> stub_properties( |
stub_properties_.DeepCopy()); |
+ stub_properties->SetWithoutPathExpansion( |
+ shill::kServiceCompleteListProperty, |
+ GetEnabledServiceList(shill::kServiceCompleteListProperty)); |
callback.Run(DBUS_METHOD_CALL_SUCCESS, *stub_properties); |
} |
@@ -844,6 +821,13 @@ void FakeShillManagerClient::NotifyObserversPropertyChanged( |
LOG(ERROR) << "Notify for unknown property: " << property; |
return; |
} |
+ if (property == shill::kServiceCompleteListProperty) { |
+ scoped_ptr<base::ListValue> services(GetEnabledServiceList(property)); |
+ FOR_EACH_OBSERVER(ShillPropertyChangedObserver, |
+ observer_list_, |
+ OnPropertyChanged(property, *(services.get()))); |
+ return; |
+ } |
FOR_EACH_OBSERVER(ShillPropertyChangedObserver, |
observer_list_, |
OnPropertyChanged(property, *value)); |
@@ -891,6 +875,33 @@ void FakeShillManagerClient::SetTechnologyEnabled( |
SortManagerServices(true); |
} |
+base::ListValue* FakeShillManagerClient::GetEnabledServiceList( |
+ const std::string& property) const { |
+ base::ListValue* new_service_list = new base::ListValue; |
+ const base::ListValue* service_list; |
+ if (stub_properties_.GetListWithoutPathExpansion(property, &service_list)) { |
+ ShillServiceClient::TestInterface* service_client = |
+ DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
+ for (base::ListValue::const_iterator iter = service_list->begin(); |
+ iter != service_list->end(); ++iter) { |
+ std::string service_path; |
+ if (!(*iter)->GetAsString(&service_path)) |
+ continue; |
+ const base::DictionaryValue* properties = |
+ service_client->GetServiceProperties(service_path); |
+ if (!properties) { |
+ LOG(ERROR) << "Properties not found for service: " << service_path; |
+ continue; |
+ } |
+ std::string type; |
+ properties->GetString(shill::kTypeProperty, &type); |
+ if (TechnologyEnabled(type)) |
+ new_service_list->Append((*iter)->DeepCopy()); |
+ } |
+ } |
+ return new_service_list; |
+} |
+ |
void FakeShillManagerClient::ScanCompleted(const std::string& device_path, |
const base::Closure& callback) { |
if (!device_path.empty()) { |
@@ -901,7 +912,6 @@ void FakeShillManagerClient::ScanCompleted(const std::string& device_path, |
} |
DVLOG(2) << "ScanCompleted"; |
CallNotifyObserversPropertyChanged(shill::kServiceCompleteListProperty); |
- CallNotifyObserversPropertyChanged(shill::kServicesProperty); |
base::MessageLoop::current()->PostTask(FROM_HERE, callback); |
} |