shill: wimax: Support WiMaxService::Unload.

On Unload, deregister and destroy all non-default services. Also, when a default
service is stopped (because its network has disappeared), deregister it from
Manager and destroy it -- this makes StartLiveServices symmetrical to
StopDeadServices.

BUG=chrome-os-partner:9942
TEST=unit tests

Change-Id: Ie9598b21529cbaf7a6b195468cbbd1e10edbe076
Reviewed-on: https://gerrit.chromium.org/gerrit/23649
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/wimax_service.h b/wimax_service.h
index c48c0a5..f50510a 100644
--- a/wimax_service.h
+++ b/wimax_service.h
@@ -52,6 +52,8 @@
   const std::string &network_name() const { return network_name_; }
   const WiMaxNetworkId &network_id() const { return network_id_; }
   void set_network_id(const WiMaxNetworkId &id) { network_id_ = id; }
+  bool is_default() const { return is_default_; }
+  void set_is_default(bool is_default) { is_default_ = is_default; }
 
   static WiMaxNetworkId ConvertIdentifierToNetworkId(uint32 identifier);
 
@@ -69,8 +71,7 @@
   virtual bool Is8021x() const;
   virtual void set_eap(const EapCredentials &eap);
   virtual bool Save(StoreInterface *storage);
-
-  // TODO(petkov): Support Unload (crosbug.com/p/9942).
+  virtual bool Unload();
 
  private:
   friend class WiMaxServiceTest;
@@ -92,6 +93,7 @@
   WiMaxNetworkId network_id_;
   std::string network_name_;
   bool need_passphrase_;
+  bool is_default_;
 
   DISALLOW_COPY_AND_ASSIGN(WiMaxService);
 };