buffet: Move  ApManagerClient out of libweave

libweave will rely on implementation provided by interface
weave::Network.

BUG=brillo:1247
TEST='FEATURES=test emerge-gizmo buffet'

Change-Id: I36b8d8af21d461d53815c214f18586cd3afcce5c
Reviewed-on: https://chromium-review.googlesource.com/290101
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Trybot-Ready: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/libweave/src/privet/ap_manager_client.cc b/buffet/ap_manager_client.cc
similarity index 95%
rename from libweave/src/privet/ap_manager_client.cc
rename to buffet/ap_manager_client.cc
index 2395da8..6449c0f 100644
--- a/libweave/src/privet/ap_manager_client.cc
+++ b/buffet/ap_manager_client.cc
@@ -2,18 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "libweave/src/privet/ap_manager_client.h"
+#include "buffet/ap_manager_client.h"
 
-namespace weave {
-namespace privet {
+namespace buffet {
 
 using org::chromium::apmanager::ConfigProxy;
 using org::chromium::apmanager::ManagerProxy;
 using org::chromium::apmanager::ServiceProxy;
 
 ApManagerClient::ApManagerClient(const scoped_refptr<dbus::Bus>& bus)
-    : bus_(bus) {
-}
+    : bus_(bus) {}
 
 ApManagerClient::~ApManagerClient() {
   Stop();
@@ -113,5 +111,4 @@
   Stop();
 }
 
-}  // namespace privet
-}  // namespace weave
+}  // namespace buffet
diff --git a/libweave/src/privet/ap_manager_client.h b/buffet/ap_manager_client.h
similarity index 85%
rename from libweave/src/privet/ap_manager_client.h
rename to buffet/ap_manager_client.h
index 073ea08..8397587 100644
--- a/libweave/src/privet/ap_manager_client.h
+++ b/buffet/ap_manager_client.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef LIBWEAVE_SRC_PRIVET_AP_MANAGER_CLIENT_H_
-#define LIBWEAVE_SRC_PRIVET_AP_MANAGER_CLIENT_H_
+#ifndef BUFFET_AP_MANAGER_CLIENT_H_
+#define BUFFET_AP_MANAGER_CLIENT_H_
 
 #include <memory>
 #include <string>
@@ -13,8 +13,7 @@
 
 #include "apmanager/dbus-proxies.h"
 
-namespace weave {
-namespace privet {
+namespace buffet {
 
 // Manages soft AP for wifi bootstrapping.
 // Once created can handle multiple Start/Stop requests.
@@ -53,7 +52,6 @@
   base::WeakPtrFactory<ApManagerClient> weak_ptr_factory_{this};
 };
 
-}  // namespace privet
-}  // namespace weave
+}  // namespace buffet
 
-#endif  // LIBWEAVE_SRC_PRIVET_AP_MANAGER_CLIENT_H_
+#endif  // BUFFET_AP_MANAGER_CLIENT_H_
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index fde6d30..1c619fa 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -25,6 +25,7 @@
         'dbus_service_config': 'dbus_bindings/dbus-service-config.json',
       },
       'sources': [
+        'ap_manager_client.cc',
         'dbus_bindings/org.chromium.Buffet.Command.xml',
         'dbus_bindings/org.chromium.Buffet.Manager.xml',
         'dbus_command_dispatcher.cc',
@@ -57,7 +58,6 @@
         '../libweave/src/notification/xmpp_channel.cc',
         '../libweave/src/notification/xmpp_iq_stanza_handler.cc',
         '../libweave/src/notification/xmpp_stream_parser.cc',
-        '../libweave/src/privet/ap_manager_client.cc',
         '../libweave/src/privet/cloud_delegate.cc',
         '../libweave/src/privet/constants.cc',
         '../libweave/src/privet/device_delegate.cc',
diff --git a/buffet/shill_client.cc b/buffet/shill_client.cc
index 1efc52d..9db5e85 100644
--- a/buffet/shill_client.cc
+++ b/buffet/shill_client.cc
@@ -13,6 +13,7 @@
 #include <chromeos/errors/error.h>
 #include <chromeos/errors/error_codes.h>
 
+#include "buffet/ap_manager_client.h"
 #include "weave/enum_to_string.h"
 
 using chromeos::Any;
@@ -85,7 +86,8 @@
                          const set<string>& device_whitelist)
     : bus_{bus},
       manager_proxy_{bus_, ObjectPath{"/"}},
-      device_whitelist_{device_whitelist} {
+      device_whitelist_{device_whitelist},
+      ap_manager_client_{new ApManagerClient(bus)} {
   manager_proxy_.RegisterPropertyChangedSignalHandler(
       base::Bind(&ShillClient::OnManagerPropertyChange,
                  weak_factory_.GetWeakPtr()),
@@ -97,6 +99,8 @@
       ->SetNameOwnerChangedCallback(owner_changed_cb);
 }
 
+ShillClient::~ShillClient() {}
+
 void ShillClient::Init() {
   VLOG(2) << "ShillClient::Init();";
   CleanupConnectingService(false);
@@ -148,6 +152,14 @@
   return connectivity_state_;
 }
 
+void ShillClient::EnableAccessPoint(const std::string& ssid) {
+  ap_manager_client_->Start(ssid);
+}
+
+void ShillClient::DisableAccessPoint() {
+  ap_manager_client_->Stop();
+}
+
 void ShillClient::AddOnConnectionChangedCallback(
     const OnConnectionChangedCallback& listener) {
   connectivity_listeners_.push_back(listener);
diff --git a/buffet/shill_client.h b/buffet/shill_client.h
index 06c1be5..2538674 100644
--- a/buffet/shill_client.h
+++ b/buffet/shill_client.h
@@ -22,11 +22,13 @@
 
 namespace buffet {
 
+class ApManagerClient;
+
 class ShillClient final : public weave::Network {
  public:
   ShillClient(const scoped_refptr<dbus::Bus>& bus,
               const std::set<std::string>& device_whitelist);
-  ~ShillClient() = default;
+  ~ShillClient();
 
   void Init();
 
@@ -38,6 +40,8 @@
                         const base::Closure& on_success,
                         chromeos::ErrorPtr* error) override;
   weave::NetworkState GetConnectionState() const override;
+  void EnableAccessPoint(const std::string& ssid) override;
+  void DisableAccessPoint() override;
 
  private:
   struct DeviceState {
@@ -105,6 +109,8 @@
   std::map<dbus::ObjectPath, DeviceState> devices_;
   weave::NetworkState connectivity_state_{weave::NetworkState::kOffline};
 
+  std::unique_ptr<ApManagerClient> ap_manager_client_;
+
   base::WeakPtrFactory<ShillClient> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ShillClient);
diff --git a/libweave/include/weave/network.h b/libweave/include/weave/network.h
index cd27e2c..0e5cc26 100644
--- a/libweave/include/weave/network.h
+++ b/libweave/include/weave/network.h
@@ -39,6 +39,12 @@
 
   virtual NetworkState GetConnectionState() const = 0;
 
+  // Starts WiFi access point for wifi setup.
+  virtual void EnableAccessPoint(const std::string& ssid) = 0;
+
+  // Stops WiFi access point.
+  virtual void DisableAccessPoint() = 0;
+
  protected:
   virtual ~Network() = default;
 };
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index 4523337..32142f7 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -29,7 +29,6 @@
 
 #include "buffet/dbus_constants.h"
 #include "libweave/src/device_registration_info.h"
-#include "libweave/src/privet/ap_manager_client.h"
 #include "libweave/src/privet/cloud_delegate.h"
 #include "libweave/src/privet/constants.h"
 #include "libweave/src/privet/device_delegate.h"
@@ -78,14 +77,12 @@
                                       disable_security_));
   network->AddOnConnectionChangedCallback(
       base::Bind(&Manager::OnConnectivityChanged, base::Unretained(this)));
-  ap_manager_client_.reset(new ApManagerClient(bus));
 
   if (device->GetConfig().wifi_auto_setup_enabled()) {
     VLOG(1) << "Enabling WiFi bootstrapping.";
     wifi_bootstrap_manager_.reset(new WifiBootstrapManager(
         device->GetConfig().last_configured_ssid(), options.test_privet_ssid,
-        device->GetConfig().ble_setup_enabled(),
-        network, ap_manager_client_.get(), cloud_.get()));
+        device->GetConfig().ble_setup_enabled(), network, cloud_.get()));
     wifi_bootstrap_manager_->Init();
   }
 
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h
index 06d3bae..bdcb298 100644
--- a/libweave/src/privet/privet_manager.h
+++ b/libweave/src/privet/privet_manager.h
@@ -41,7 +41,6 @@
 
 namespace privet {
 
-class ApManagerClient;
 class CloudDelegate;
 class DaemonState;
 class DeviceDelegate;
@@ -101,7 +100,6 @@
   std::unique_ptr<CloudDelegate> cloud_;
   std::unique_ptr<DeviceDelegate> device_;
   std::unique_ptr<SecurityManager> security_;
-  std::unique_ptr<ApManagerClient> ap_manager_client_;
   std::unique_ptr<WifiBootstrapManager> wifi_bootstrap_manager_;
   std::unique_ptr<Publisher> publisher_;
   std::unique_ptr<PrivetHandler> privet_handler_;
diff --git a/libweave/src/privet/privet_types.cc b/libweave/src/privet/privet_types.cc
index cbe33da..e3f3307 100644
--- a/libweave/src/privet/privet_types.cc
+++ b/libweave/src/privet/privet_types.cc
@@ -7,8 +7,8 @@
 #include <string>
 
 #include "weave/enum_to_string.h"
-#include "weave/privet.h"
 #include "weave/network.h"
+#include "weave/privet.h"
 
 namespace weave {
 
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 841e903..4407e6d 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -10,7 +10,6 @@
 #include <chromeos/bind_lambda.h>
 #include <chromeos/key_value_store.h>
 
-#include "libweave/src/privet/ap_manager_client.h"
 #include "libweave/src/privet/constants.h"
 #include "weave/enum_to_string.h"
 #include "weave/network.h"
@@ -29,10 +28,8 @@
     const std::string& test_privet_ssid,
     bool ble_setup_enabled,
     Network* network,
-    ApManagerClient* ap_manager_client,
     CloudDelegate* gcd)
     : network_{network},
-      ap_manager_client_{ap_manager_client},
       ssid_generator_{gcd, this},
       last_configured_ssid_{last_configured_ssid},
       test_privet_ssid_{test_privet_ssid},
@@ -86,15 +83,16 @@
         base::TimeDelta::FromSeconds(kBootstrapTimeoutSeconds));
   }
   // TODO(vitalybuka): Add SSID probing.
-  std::string ssid = GenerateSsid();
-  CHECK(!ssid.empty());
-  ap_manager_client_->Start(ssid);
+  privet_ssid_ = GenerateSsid();
+  CHECK(!privet_ssid_.empty());
+  network_->EnableAccessPoint(privet_ssid_);
   LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap start: not implemented.";
 }
 
 void WifiBootstrapManager::EndBootstrapping() {
   LOG_IF(INFO, ble_setup_enabled_) << "BLE Bootstrap stop: not implemented.";
-  ap_manager_client_->Stop();
+  network_->DisableAccessPoint();
+  privet_ssid_.clear();
 }
 
 void WifiBootstrapManager::StartConnecting(const std::string& ssid,
@@ -194,7 +192,7 @@
 }
 
 std::string WifiBootstrapManager::GetHostedSsid() const {
-  return ap_manager_client_->GetSsid();
+  return privet_ssid_;
 }
 
 std::set<WifiType> WifiBootstrapManager::GetTypes() const {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index ad87df1..dad13a0 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -26,7 +26,6 @@
 
 namespace privet {
 
-class ApManagerClient;
 class CloudDelegate;
 class DeviceDelegate;
 
@@ -41,7 +40,6 @@
                        const std::string& test_privet_ssid,
                        bool wifi_setup_enabled,
                        Network* shill_client,
-                       ApManagerClient* ap_manager_client,
                        CloudDelegate* gcd);
   ~WifiBootstrapManager() override = default;
   virtual void Init();
@@ -101,13 +99,13 @@
   SetupState setup_state_{SetupState::kNone};
   ConnectionState connection_state_{ConnectionState::kDisabled};
   Network* network_;
-  ApManagerClient* ap_manager_client_;
   WifiSsidGenerator ssid_generator_;
 
   std::vector<StateListener> state_listeners_;
   bool currently_online_{false};
   std::string last_configured_ssid_;
   std::string test_privet_ssid_;
+  std::string privet_ssid_;
   bool ble_setup_enabled_{false};
 
   ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};