summaryrefslogtreecommitdiffstats
path: root/chromeos/network/shill_property_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromeos/network/shill_property_handler.cc')
-rw-r--r--chromeos/network/shill_property_handler.cc30
1 files changed, 25 insertions, 5 deletions
diff --git a/chromeos/network/shill_property_handler.cc b/chromeos/network/shill_property_handler.cc
index fad1d75..e6efd65 100644
--- a/chromeos/network/shill_property_handler.cc
+++ b/chromeos/network/shill_property_handler.cc
@@ -121,17 +121,22 @@ void ShillPropertyHandler::Init() {
shill_manager_->AddPropertyChangedObserver(this);
}
-bool ShillPropertyHandler::TechnologyAvailable(
+bool ShillPropertyHandler::IsTechnologyAvailable(
const std::string& technology) const {
return available_technologies_.count(technology) != 0;
}
-bool ShillPropertyHandler::TechnologyEnabled(
+bool ShillPropertyHandler::IsTechnologyEnabled(
const std::string& technology) const {
return enabled_technologies_.count(technology) != 0;
}
-bool ShillPropertyHandler::TechnologyUninitialized(
+bool ShillPropertyHandler::IsTechnologyEnabling(
+ const std::string& technology) const {
+ return enabling_technologies_.count(technology) != 0;
+}
+
+bool ShillPropertyHandler::IsTechnologyUninitialized(
const std::string& technology) const {
return uninitialized_technologies_.count(technology) != 0;
}
@@ -141,12 +146,16 @@ void ShillPropertyHandler::SetTechnologyEnabled(
bool enabled,
const network_handler::ErrorCallback& error_callback) {
if (enabled) {
+ enabling_technologies_.insert(technology);
shill_manager_->EnableTechnology(
technology,
base::Bind(&base::DoNothing),
- base::Bind(&network_handler::ShillErrorCallbackFunction,
- kLogModule, technology, error_callback));
+ base::Bind(&ShillPropertyHandler::EnableTechnologyFailed,
+ AsWeakPtr(), technology, error_callback));
} else {
+ // Imediately clear locally from enabled and enabling lists.
+ enabled_technologies_.erase(technology);
+ enabling_technologies_.erase(technology);
shill_manager_->DisableTechnology(
technology,
base::Bind(&base::DoNothing),
@@ -351,6 +360,7 @@ void ShillPropertyHandler::UpdateEnabledTechnologies(
(*iter)->GetAsString(&technology);
DCHECK(!technology.empty());
enabled_technologies_.insert(technology);
+ enabling_technologies_.erase(technology);
}
}
@@ -369,6 +379,16 @@ void ShillPropertyHandler::UpdateUninitializedTechnologies(
}
}
+void ShillPropertyHandler::EnableTechnologyFailed(
+ const std::string& technology,
+ const network_handler::ErrorCallback& error_callback,
+ const std::string& error_name,
+ const std::string& error_message) {
+ enabling_technologies_.erase(technology);
+ network_handler::ShillErrorCallbackFunction(
+ kLogModule, technology, error_callback, error_name, error_message);
+}
+
void ShillPropertyHandler::GetPropertiesCallback(
ManagedState::ManagedType type,
const std::string& path,