diff --git a/libweave/examples/ubuntu/event_http_server.cc b/libweave/examples/ubuntu/event_http_server.cc
index 3fefac7..8e45648 100644
--- a/libweave/examples/ubuntu/event_http_server.cc
+++ b/libweave/examples/ubuntu/event_http_server.cc
@@ -37,8 +37,8 @@
 
   void Read(void* buffer,
             size_t size_to_read,
-            const base::Callback<void(size_t)>& success_callback,
-            const base::Callback<void(const Error*)>& error_callback) override {
+            const ReadSuccessCallback& success_callback,
+            const ErrorCallback& error_callback) override {
     CHECK_LE(read_position_, data_.size());
     size_t size_read = std::min(size_to_read, data_.size() - read_position_);
     if (size_read > 0)
@@ -47,11 +47,10 @@
     success_callback.Run(size_read);
   }
 
-  void Write(
-      const void* buffer,
-      size_t size_to_write,
-      const base::Closure& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override {
+  void Write(const void* buffer,
+             size_t size_to_write,
+             const SuccessCallback& success_callback,
+             const ErrorCallback& error_callback) override {
     LOG(FATAL) << "Unsupported";
   }
 
diff --git a/libweave/examples/ubuntu/network_manager.cc b/libweave/examples/ubuntu/network_manager.cc
index 56e9544..f86f12b 100644
--- a/libweave/examples/ubuntu/network_manager.cc
+++ b/libweave/examples/ubuntu/network_manager.cc
@@ -43,11 +43,11 @@
   SSL_load_error_strings();
   SSL_library_init();
 
-  DisableAccessPoint();
+  StopAccessPoint();
   UpdateNetworkState();
 }
 NetworkImpl::~NetworkImpl() {
-  DisableAccessPoint();
+  StopAccessPoint();
 }
 
 void NetworkImpl::AddOnConnectionChangedCallback(
@@ -105,11 +105,10 @@
       base::TimeDelta::FromSeconds(1));
 }
 
-void NetworkImpl::ConnectToService(
-    const std::string& ssid,
-    const std::string& passphrase,
-    const base::Closure& success_callback,
-    const base::Callback<void(const Error*)>& error_callback) {
+void NetworkImpl::Connect(const std::string& ssid,
+                          const std::string& passphrase,
+                          const SuccessCallback& success_callback,
+                          const ErrorCallback& error_callback) {
   force_bootstrapping_ = false;
   CHECK(!hostapd_started_);
   if (hostapd_started_) {
@@ -151,7 +150,7 @@
   return network_state_;
 }
 
-void NetworkImpl::EnableAccessPoint(const std::string& ssid) {
+void NetworkImpl::StartAccessPoint(const std::string& ssid) {
   if (hostapd_started_)
     return;
 
@@ -193,7 +192,7 @@
   CHECK_EQ(0, std::system(("dnsmasq --conf-file=" + dnsmasq_conf).c_str()));
 }
 
-void NetworkImpl::DisableAccessPoint() {
+void NetworkImpl::StopAccessPoint() {
   int res = std::system("pkill -f dnsmasq.*/tmp/weave");
   res = std::system("pkill -f hostapd.*/tmp/weave");
   CHECK_EQ(0, std::system("nmcli nm wifi on"));
diff --git a/libweave/examples/ubuntu/network_manager.h b/libweave/examples/ubuntu/network_manager.h
index 4e1b6bd..f56e391 100644
--- a/libweave/examples/ubuntu/network_manager.h
+++ b/libweave/examples/ubuntu/network_manager.h
@@ -11,7 +11,7 @@
 #include <base/memory/weak_ptr.h>
 #include <base/time/time.h>
 #include <weave/network.h>
-#include <weave/wifi.h>
+#include <weave/wifi_provider.h>
 
 namespace weave {
 
@@ -21,7 +21,7 @@
 
 // Basic weave::Network implementation.
 // Production version of SSL socket needs secure server certificate check.
-class NetworkImpl : public Network, public Wifi {
+class NetworkImpl : public Network, public WifiProvider {
  public:
   explicit NetworkImpl(TaskRunner* task_runner, bool force_bootstrapping);
   ~NetworkImpl();
@@ -37,13 +37,12 @@
       const base::Callback<void(const Error*)>& error_callback) override;
 
   // Wifi implementation
-  void ConnectToService(
-      const std::string& ssid,
-      const std::string& passphrase,
-      const base::Closure& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override;
-  void EnableAccessPoint(const std::string& ssid) override;
-  void DisableAccessPoint() override;
+  void Connect(const std::string& ssid,
+               const std::string& passphrase,
+               const SuccessCallback& success_callback,
+               const ErrorCallback& error_callback) override;
+  void StartAccessPoint(const std::string& ssid) override;
+  void StopAccessPoint() override;
 
   static bool HasWifiCapability();
 
diff --git a/libweave/examples/ubuntu/ssl_stream.cc b/libweave/examples/ubuntu/ssl_stream.cc
index 85ffae5..71d5148 100644
--- a/libweave/examples/ubuntu/ssl_stream.cc
+++ b/libweave/examples/ubuntu/ssl_stream.cc
@@ -22,8 +22,8 @@
 
 void SSLStream::Read(void* buffer,
                      size_t size_to_read,
-                     const base::Callback<void(size_t)>& success_callback,
-                     const base::Callback<void(const Error*)>& error_callback) {
+                     const ReadSuccessCallback& success_callback,
+                     const ErrorCallback& error_callback) {
   int res = SSL_read(ssl_.get(), buffer, size_to_read);
   if (res > 0) {
     task_runner_->PostDelayedTask(
@@ -57,11 +57,10 @@
   return;
 }
 
-void SSLStream::Write(
-    const void* buffer,
-    size_t size_to_write,
-    const base::Closure& success_callback,
-    const base::Callback<void(const Error*)>& error_callback) {
+void SSLStream::Write(const void* buffer,
+                      size_t size_to_write,
+                      const SuccessCallback& success_callback,
+                      const ErrorCallback& error_callback) {
   int res = SSL_write(ssl_.get(), buffer, size_to_write);
   if (res > 0) {
     buffer = static_cast<const char*>(buffer) + res;
diff --git a/libweave/examples/ubuntu/ssl_stream.h b/libweave/examples/ubuntu/ssl_stream.h
index 9c0d604..7343df9 100644
--- a/libweave/examples/ubuntu/ssl_stream.h
+++ b/libweave/examples/ubuntu/ssl_stream.h
@@ -24,20 +24,20 @@
 
   void Read(void* buffer,
             size_t size_to_read,
-            const base::Callback<void(size_t)>& success_callback,
-            const base::Callback<void(const Error*)>& error_callback) override;
+            const ReadSuccessCallback& success_callback,
+            const ErrorCallback& error_callback) override;
 
   void Write(const void* buffer,
              size_t size_to_write,
-             const base::Closure& success_callback,
-             const base::Callback<void(const Error*)>& error_callback) override;
+             const SuccessCallback& success_callback,
+             const ErrorCallback& error_callback) override;
 
   void CancelPendingOperations() override;
 
   bool Init(const std::string& host, uint16_t port);
 
  private:
-  void RunDelayedTask(const base::Closure& success_callback);
+  void RunDelayedTask(const base::Closure& task);
 
   TaskRunner* task_runner_{nullptr};
   std::unique_ptr<SSL_CTX, decltype(&SSL_CTX_free)> ctx_{nullptr, SSL_CTX_free};
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index e45d727..0d01910 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -21,7 +21,7 @@
 #include <weave/privet.h>
 #include <weave/state.h>
 #include <weave/task_runner.h>
-#include <weave/wifi.h>
+#include <weave/wifi_provider.h>
 
 namespace weave {
 
@@ -44,7 +44,7 @@
                      Network* network,
                      Mdns* mdns,
                      HttpServer* http_server,
-                     Wifi* wifi,
+                     WifiProvider* wifi,
                      Bluetooth* bluetooth) = 0;
 
   virtual Commands* GetCommands() = 0;
diff --git a/libweave/include/weave/error.h b/libweave/include/weave/error.h
index 314f685..b9f07a5 100644
--- a/libweave/include/weave/error.h
+++ b/libweave/include/weave/error.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include <base/callback.h>
 #include <base/macros.h>
 #include <base/location.h>
 #include <base/compiler_specific.h>
@@ -125,6 +126,9 @@
   DISALLOW_COPY_AND_ASSIGN(Error);
 };
 
+using SuccessCallback = base::Closure;
+using ErrorCallback = base::Callback<void(const Error*)>;
+
 }  // namespace weave
 
 #endif  // LIBWEAVE_INCLUDE_WEAVE_ERROR_H_
diff --git a/libweave/include/weave/stream.h b/libweave/include/weave/stream.h
index 5c317a0..99385a7 100644
--- a/libweave/include/weave/stream.h
+++ b/libweave/include/weave/stream.h
@@ -17,14 +17,16 @@
  public:
   virtual ~InputStream() = default;
 
+  // Callbacks types for Read.
+  using ReadSuccessCallback = base::Callback<void(size_t)>;
+
   // Implementation should return immediately and post either success_callback
   // or error_callback. Caller guarantees that buffet is alive until either of
   // callback is called.
-  virtual void Read(
-      void* buffer,
-      size_t size_to_read,
-      const base::Callback<void(size_t)>& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) = 0;
+  virtual void Read(void* buffer,
+                    size_t size_to_read,
+                    const ReadSuccessCallback& success_callback,
+                    const ErrorCallback& error_callback) = 0;
 };
 
 // Interface for async input streaming.
@@ -36,11 +38,10 @@
   // or error_callback. Caller guarantees that buffet is alive until either of
   // callback is called.
   // Success callback must be called only after all data is written.
-  virtual void Write(
-      const void* buffer,
-      size_t size_to_write,
-      const base::Closure& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) = 0;
+  virtual void Write(const void* buffer,
+                     size_t size_to_write,
+                     const SuccessCallback& success_callback,
+                     const ErrorCallback& error_callback) = 0;
 };
 
 // Interface for async bi-directional streaming.
diff --git a/libweave/include/weave/test/mock_wifi.h b/libweave/include/weave/test/mock_wifi.h
deleted file mode 100644
index 20223ed..0000000
--- a/libweave/include/weave/test/mock_wifi.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2015 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_H_
-#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_H_
-
-#include <weave/network.h>
-
-#include <string>
-
-#include <gmock/gmock.h>
-
-namespace weave {
-namespace test {
-
-class MockWifi : public Wifi {
- public:
-  MockWifi() {}
-  ~MockWifi() override = default;
-
-  MOCK_METHOD4(ConnectToService,
-               void(const std::string&,
-                    const std::string&,
-                    const base::Closure&,
-                    const base::Callback<void(const Error*)>&));
-  MOCK_METHOD1(EnableAccessPoint, void(const std::string&));
-  MOCK_METHOD0(DisableAccessPoint, void());
-};
-
-}  // namespace test
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_H_
diff --git a/libweave/include/weave/test/mock_wifi_provider.h b/libweave/include/weave/test/mock_wifi_provider.h
new file mode 100644
index 0000000..33d4cc4
--- /dev/null
+++ b/libweave/include/weave/test/mock_wifi_provider.h
@@ -0,0 +1,34 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
+
+#include <weave/network.h>
+
+#include <string>
+
+#include <gmock/gmock.h>
+
+namespace weave {
+namespace test {
+
+class MockWifiProvider : public WifiProvider {
+ public:
+  MockWifiProvider() {}
+  ~MockWifiProvider() override = default;
+
+  MOCK_METHOD4(Connect,
+               void(const std::string&,
+                    const std::string&,
+                    const base::Closure&,
+                    const base::Callback<void(const Error*)>&));
+  MOCK_METHOD1(StartAccessPoint, void(const std::string&));
+  MOCK_METHOD0(StopAccessPoint, void());
+};
+
+}  // namespace test
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_TEST_MOCK_WIFI_PROVIDER_H_
diff --git a/libweave/include/weave/wifi.h b/libweave/include/weave/wifi.h
deleted file mode 100644
index e763afa..0000000
--- a/libweave/include/weave/wifi.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2015 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIBWEAVE_INCLUDE_WEAVE_WIFI_H_
-#define LIBWEAVE_INCLUDE_WEAVE_WIFI_H_
-
-#include <string>
-
-#include <base/callback.h>
-#include <weave/error.h>
-
-namespace weave {
-
-class Wifi {
- public:
-  // Implementation should attempt to connect to the given network with the
-  // given passphrase. Implementation should run either of callback.
-  // Callback should be posted.
-  virtual void ConnectToService(
-      const std::string& ssid,
-      const std::string& passphrase,
-      const base::Closure& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) = 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 ~Wifi() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_WIFI_H_
diff --git a/libweave/include/weave/wifi_provider.h b/libweave/include/weave/wifi_provider.h
new file mode 100644
index 0000000..4173796
--- /dev/null
+++ b/libweave/include/weave/wifi_provider.h
@@ -0,0 +1,37 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBWEAVE_INCLUDE_WEAVE_WIFI_PROVIDER_H_
+#define LIBWEAVE_INCLUDE_WEAVE_WIFI_PROVIDER_H_
+
+#include <string>
+
+#include <base/callback.h>
+#include <weave/error.h>
+
+namespace weave {
+
+// Interface with methods to control WiFi capability of the device.
+class WifiProvider {
+ public:
+  // Connects to the given network with the given pass-phrase. Implementation
+  // should post either of callbacks.
+  virtual void Connect(const std::string& ssid,
+                       const std::string& passphrase,
+                       const SuccessCallback& success_callback,
+                       const ErrorCallback& error_callback) = 0;
+
+  // Starts WiFi access point for wifi setup.
+  virtual void StartAccessPoint(const std::string& ssid) = 0;
+
+  // Stops WiFi access point.
+  virtual void StopAccessPoint() = 0;
+
+ protected:
+  virtual ~WifiProvider() = default;
+};
+
+}  // namespace weave
+
+#endif  // LIBWEAVE_INCLUDE_WEAVE_WIFI_PROVIDER_H_
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 111b87e..15c5e49 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -36,7 +36,7 @@
                           Network* network,
                           Mdns* mdns,
                           HttpServer* http_server,
-                          Wifi* wifi,
+                          WifiProvider* wifi,
                           Bluetooth* bluetooth) {
   command_manager_ = std::make_shared<CommandManager>();
   command_manager_->Startup(config_store);
@@ -91,7 +91,7 @@
                                 Network* network,
                                 Mdns* mdns,
                                 HttpServer* http_server,
-                                Wifi* wifi,
+                                WifiProvider* wifi,
                                 Bluetooth* bluetooth) {
   privet_.reset(new privet::Manager{});
   privet_->Start(options, task_runner, network, mdns, http_server, wifi,
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index bc6f031..de0cfa5 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -33,7 +33,7 @@
              Network* network,
              Mdns* mdns,
              HttpServer* http_server,
-             Wifi* wifi,
+             WifiProvider* wifi,
              Bluetooth* bluetooth) override;
 
   Commands* GetCommands() override;
@@ -49,7 +49,7 @@
                    Network* network,
                    Mdns* mdns,
                    HttpServer* http_server,
-                   Wifi* wifi,
+                   WifiProvider* wifi,
                    Bluetooth* bluetooth);
 
   void OnWiFiBootstrapStateChanged(weave::WifiSetupState state);
diff --git a/libweave/src/notification/xmpp_channel_unittest.cc b/libweave/src/notification/xmpp_channel_unittest.cc
index 1f5961f..4d8ab76 100644
--- a/libweave/src/notification/xmpp_channel_unittest.cc
+++ b/libweave/src/notification/xmpp_channel_unittest.cc
@@ -95,8 +95,8 @@
 
   void Read(void* buffer,
             size_t size_to_read,
-            const base::Callback<void(size_t)>& success_callback,
-            const base::Callback<void(const Error*)>& error_callback) override {
+            const ReadSuccessCallback& success_callback,
+            const ErrorCallback& error_callback) override {
     if (read_data_.empty()) {
       task_runner_->PostDelayedTask(
           FROM_HERE,
@@ -112,11 +112,10 @@
                                   base::TimeDelta::FromSeconds(0));
   }
 
-  void Write(
-      const void* buffer,
-      size_t size_to_write,
-      const base::Closure& success_callback,
-      const base::Callback<void(const Error*)>& error_callback) override {
+  void Write(const void* buffer,
+             size_t size_to_write,
+             const SuccessCallback& success_callback,
+             const ErrorCallback& error_callback) override {
     size_t size = std::min(size_to_write, write_data_.size());
     EXPECT_EQ(
         write_data_.substr(0, size),
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc
index feaab2c..1bc7caf 100644
--- a/libweave/src/privet/privet_manager.cc
+++ b/libweave/src/privet/privet_manager.cc
@@ -38,7 +38,7 @@
                     Network* network,
                     Mdns* mdns,
                     HttpServer* http_server,
-                    Wifi* wifi,
+                    WifiProvider* wifi,
                     DeviceRegistrationInfo* device,
                     CommandManager* command_manager,
                     StateManager* state_manager) {
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h
index 50f7416..a452a6b 100644
--- a/libweave/src/privet/privet_manager.h
+++ b/libweave/src/privet/privet_manager.h
@@ -52,7 +52,7 @@
              Network* network,
              Mdns* mdns,
              HttpServer* http_server,
-             Wifi* wifi,
+             WifiProvider* wifi,
              DeviceRegistrationInfo* device,
              CommandManager* command_manager,
              StateManager* state_manager);
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index 1cb3cd4..bd84e14 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -9,7 +9,7 @@
 #include <weave/enum_to_string.h>
 #include <weave/network.h>
 #include <weave/task_runner.h>
-#include <weave/wifi.h>
+#include <weave/wifi_provider.h>
 
 #include "libweave/src/bind_lambda.h"
 #include "libweave/src/privet/constants.h"
@@ -23,7 +23,7 @@
     bool ble_setup_enabled,
     TaskRunner* task_runner,
     Network* network,
-    Wifi* wifi,
+    WifiProvider* wifi,
     CloudDelegate* gcd)
     : task_runner_{task_runner},
       network_{network},
@@ -80,13 +80,13 @@
   // TODO(vitalybuka): Add SSID probing.
   privet_ssid_ = GenerateSsid();
   CHECK(!privet_ssid_.empty());
-  wifi_->EnableAccessPoint(privet_ssid_);
+  wifi_->StartAccessPoint(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.";
-  wifi_->DisableAccessPoint();
+  wifi_->StopAccessPoint();
   privet_ssid_.clear();
 }
 
@@ -99,11 +99,11 @@
       FROM_HERE, base::Bind(&WifiBootstrapManager::OnConnectError,
                             tasks_weak_factory_.GetWeakPtr(), nullptr),
       base::TimeDelta::FromMinutes(3));
-  wifi_->ConnectToService(ssid, passphrase,
-                          base::Bind(&WifiBootstrapManager::OnConnectSuccess,
-                                     tasks_weak_factory_.GetWeakPtr(), ssid),
-                          base::Bind(&WifiBootstrapManager::OnConnectError,
-                                     tasks_weak_factory_.GetWeakPtr()));
+  wifi_->Connect(ssid, passphrase,
+                 base::Bind(&WifiBootstrapManager::OnConnectSuccess,
+                            tasks_weak_factory_.GetWeakPtr(), ssid),
+                 base::Bind(&WifiBootstrapManager::OnConnectError,
+                            tasks_weak_factory_.GetWeakPtr()));
 }
 
 void WifiBootstrapManager::OnConnectError(const Error* error) {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index 6c091cd..f0cb20e 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -24,7 +24,7 @@
 
 class Network;
 class TaskRunner;
-class Wifi;
+class WifiProvider;
 
 namespace privet {
 
@@ -42,7 +42,7 @@
                        bool wifi_setup_enabled,
                        TaskRunner* task_runner,
                        Network* shill_client,
-                       Wifi* wifi,
+                       WifiProvider* wifi,
                        CloudDelegate* gcd);
   ~WifiBootstrapManager() override = default;
   virtual void Init();
@@ -98,7 +98,7 @@
   ConnectionState connection_state_{ConnectionState::kDisabled};
   TaskRunner* task_runner_{nullptr};
   Network* network_{nullptr};
-  Wifi* wifi_{nullptr};
+  WifiProvider* wifi_{nullptr};
   WifiSsidGenerator ssid_generator_;
   base::Time monitor_until_;
 
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 43a7282..d495f32 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -13,7 +13,7 @@
 #include <weave/test/mock_mdns.h>
 #include <weave/test/mock_network.h>
 #include <weave/test/mock_task_runner.h>
-#include <weave/test/mock_wifi.h>
+#include <weave/test/mock_wifi_provider.h>
 #include <weave/test/unittest_utils.h>
 
 #include "libweave/src/bind_lambda.h"
@@ -283,7 +283,7 @@
   void InitDefaultExpectations() {
     InitConfigStore();
     InitNetwork();
-    EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+    EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
         .WillOnce(Return());
     InitHttpServer();
     InitMdns();
@@ -328,7 +328,7 @@
   StrictMock<test::MockNetwork> network_;
   StrictMock<test::MockMdns> mdns_;
   StrictMock<test::MockHttpServer> http_server_;
-  StrictMock<test::MockWifi> wifi_;
+  StrictMock<test::MockWifiProvider> wifi_;
   StrictMock<test::MockBluetooth> bluetooth_;
 
   std::vector<Network::OnConnectionChangedCallback> network_callbacks_;
@@ -439,7 +439,7 @@
   // Long disconnect.
   NotifyNetworkChanged(NetworkState::kOffline, {});
   auto offline_from = task_runner_.GetClock()->Now();
-  EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+  EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
       .WillOnce(InvokeWithoutArgs([this, offline_from]() {
         EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                   base::TimeDelta::FromMinutes(1));
@@ -461,7 +461,7 @@
   for (int i = 0; i < 5; ++i) {
     auto offline_from = task_runner_.GetClock()->Now();
     // Temporarily offline mode.
-    EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+    EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
         .WillOnce(InvokeWithoutArgs([this, &offline_from]() {
           EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                     base::TimeDelta::FromMinutes(1));
@@ -471,7 +471,7 @@
 
     // Try to reconnect again.
     offline_from = task_runner_.GetClock()->Now();
-    EXPECT_CALL(wifi_, DisableAccessPoint())
+    EXPECT_CALL(wifi_, StopAccessPoint())
         .WillOnce(InvokeWithoutArgs([this, offline_from]() {
           EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                     base::TimeDelta::FromMinutes(5));
@@ -491,7 +491,7 @@
       .WillRepeatedly(Return(NetworkState::kOffline));
 
   auto offline_from = task_runner_.GetClock()->Now();
-  EXPECT_CALL(wifi_, EnableAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
+  EXPECT_CALL(wifi_, StartAccessPoint(MatchesRegex("DEVICE_NAME.*prv")))
       .WillOnce(InvokeWithoutArgs([this, &offline_from]() {
         EXPECT_GT(task_runner_.GetClock()->Now() - offline_from,
                   base::TimeDelta::FromMinutes(1));
