shill: Purge service/wifi_service state on Unload
Clear relevant state from Service and WiFiService when manager
notifies the service that it is no longer backed by a Profile.
BUG=chromium-os:22947
TEST=New unit tests
Change-Id: I048d2692fade5b883332e727be39f86caf4ed7f0
Reviewed-on: https://gerrit.chromium.org/gerrit/13880
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/wifi_service.cc b/wifi_service.cc
index dd9d1c7..ca55a06 100644
--- a/wifi_service.cc
+++ b/wifi_service.cc
@@ -87,19 +87,14 @@
// XXX needs_passpharse_ = false ?
} else if (security_ == flimflam::kSecurityPsk) {
SetEAPKeyManagement("WPA-PSK");
- need_passphrase_ = true;
} else if (security_ == flimflam::kSecurityRsn) {
SetEAPKeyManagement("WPA-PSK");
- need_passphrase_ = true;
} else if (security_ == flimflam::kSecurityWpa) {
SetEAPKeyManagement("WPA-PSK");
- need_passphrase_ = true;
} else if (security_ == flimflam::kSecurityWep) {
SetEAPKeyManagement("NONE");
- need_passphrase_ = true;
} else if (security_ == flimflam::kSecurityNone) {
SetEAPKeyManagement("NONE");
- need_passphrase_ = false;
} else {
LOG(ERROR) << "unsupported security method " << security_;
}
@@ -201,7 +196,6 @@
if (error->IsSuccess()) {
passphrase_ = passphrase;
- need_passphrase_ = false;
}
UpdateConnectable();
@@ -277,6 +271,13 @@
return true;
}
+void WiFiService::Unload() {
+ Service::Unload();
+ hidden_ssid_ = false;
+ passphrase_ = "";
+ UpdateConnectable();
+}
+
bool WiFiService::IsSecurityMatch(const string &security) const {
return GetSecurityClass(security) == GetSecurityClass(security_);
}
@@ -394,16 +395,17 @@
void WiFiService::UpdateConnectable() {
if (security_ == flimflam::kSecurityNone) {
DCHECK(passphrase_.empty());
- set_connectable(true);
+ need_passphrase_ = false;
} else if (security_ == flimflam::kSecurityWep ||
security_ == flimflam::kSecurityWpa ||
security_ == flimflam::kSecurityPsk ||
security_ == flimflam::kSecurityRsn) {
- set_connectable(!passphrase_.empty());
+ need_passphrase_ = passphrase_.empty();
} else {
// TODO(quiche): Handle connectability for 802.1x. (crosbug.com/23466)
- set_connectable(false);
+ need_passphrase_ = true;
}
+ set_connectable(!need_passphrase_);
}
// static