Commit d46b48bf authored by khorimoto's avatar khorimoto Committed by Commit bot

[CrOS Tether] Add disconnect handling to NetworkConnectionHandler::TetherDelegate.

BUG=672263

Review-Url: https://codereview.chromium.org/2858943003
Cr-Commit-Position: refs/heads/master@{#469267}
parent 32e9672a
...@@ -27,14 +27,11 @@ class NetworkConnectionHandlerTetherDelegate ...@@ -27,14 +27,11 @@ class NetworkConnectionHandlerTetherDelegate
TetherDisconnector* tether_disconnector); TetherDisconnector* tether_disconnector);
~NetworkConnectionHandlerTetherDelegate() override; ~NetworkConnectionHandlerTetherDelegate() override;
// TODO(khorimoto): Add DisconnectFromNetwork to // NetworkConnectionHandler::TetherDelegate:
// NetworkConnectionHandler::TetherDelegate and override it here.
void DisconnectFromNetwork( void DisconnectFromNetwork(
const std::string& tether_network_guid, const std::string& tether_network_guid,
const base::Closure& success_callback, const base::Closure& success_callback,
const network_handler::StringResultCallback& error_callback); const network_handler::StringResultCallback& error_callback) override;
// NetworkConnectionHandler::TetherDelegate:
void ConnectToNetwork( void ConnectToNetwork(
const std::string& tether_network_guid, const std::string& tether_network_guid,
const base::Closure& success_callback, const base::Closure& success_callback,
......
...@@ -33,6 +33,14 @@ class TestNetworkConnectionHandler : public NetworkConnectionHandler { ...@@ -33,6 +33,14 @@ class TestNetworkConnectionHandler : public NetworkConnectionHandler {
error_callback); error_callback);
} }
void CallTetherDisconnect(
const std::string& tether_network_guid,
const base::Closure& success_callback,
const network_handler::ErrorCallback& error_callback) {
InitiateTetherNetworkDisconnection(tether_network_guid, success_callback,
error_callback);
}
// NetworkConnectionHandler: // NetworkConnectionHandler:
void ConnectToNetwork(const std::string& service_path, void ConnectToNetwork(const std::string& service_path,
const base::Closure& success_callback, const base::Closure& success_callback,
...@@ -89,7 +97,7 @@ class MockTetherDisconnector : public TetherDisconnector { ...@@ -89,7 +97,7 @@ class MockTetherDisconnector : public TetherDisconnector {
~MockTetherDisconnector() override {} ~MockTetherDisconnector() override {}
MOCK_METHOD3( MOCK_METHOD3(
DisconnectFomNetwork, DisconnectFromNetwork,
void(const std::string& tether_network_guid, void(const std::string& tether_network_guid,
const base::Closure& success_callback, const base::Closure& success_callback,
const network_handler::StringResultCallback& error_callback)); const network_handler::StringResultCallback& error_callback));
...@@ -97,8 +105,6 @@ class MockTetherDisconnector : public TetherDisconnector { ...@@ -97,8 +105,6 @@ class MockTetherDisconnector : public TetherDisconnector {
} // namespace } // namespace
// TODO(khorimoto): Also write a test for disconnection. This is part of a
// follow-up CL.
class NetworkConnectionHandlerTetherDelegateTest : public testing::Test { class NetworkConnectionHandlerTetherDelegateTest : public testing::Test {
protected: protected:
NetworkConnectionHandlerTetherDelegateTest() {} NetworkConnectionHandlerTetherDelegateTest() {}
...@@ -134,6 +140,13 @@ TEST_F(NetworkConnectionHandlerTetherDelegateTest, TestConnect) { ...@@ -134,6 +140,13 @@ TEST_F(NetworkConnectionHandlerTetherDelegateTest, TestConnect) {
"tetherNetworkGuid", base::Closure(), network_handler::ErrorCallback()); "tetherNetworkGuid", base::Closure(), network_handler::ErrorCallback());
} }
TEST_F(NetworkConnectionHandlerTetherDelegateTest, TestDisconnect) {
EXPECT_CALL(*mock_tether_disconnector_, DisconnectFromNetwork(_, _, _));
test_network_connection_handler_->CallTetherDisconnect(
"tetherNetworkGuid", base::Closure(), network_handler::ErrorCallback());
}
} // namespace tether } // namespace tether
} // namespace cryptauth } // namespace cryptauth
...@@ -116,7 +116,7 @@ class CHROMEOS_EXPORT ManagedNetworkConfigurationHandlerImpl ...@@ -116,7 +116,7 @@ class CHROMEOS_EXPORT ManagedNetworkConfigurationHandlerImpl
friend class AutoConnectHandlerTest; friend class AutoConnectHandlerTest;
friend class ClientCertResolverTest; friend class ClientCertResolverTest;
friend class ManagedNetworkConfigurationHandlerTest; friend class ManagedNetworkConfigurationHandlerTest;
friend class NetworkConnectionHandlerTest; friend class NetworkConnectionHandlerImplTest;
friend class NetworkHandler; friend class NetworkHandler;
friend class ProhibitedTechnologiesHandlerTest; friend class ProhibitedTechnologiesHandlerTest;
......
...@@ -75,6 +75,10 @@ class FakeTetherDelegate : public NetworkConnectionHandler::TetherDelegate { ...@@ -75,6 +75,10 @@ class FakeTetherDelegate : public NetworkConnectionHandler::TetherDelegate {
last_connected_tether_network_guid_ = tether_network_guid; last_connected_tether_network_guid_ = tether_network_guid;
success_callback.Run(); success_callback.Run();
} }
void DisconnectFromNetwork(
const std::string& tether_network_guid,
const base::Closure& success_callback,
const network_handler::StringResultCallback& error_callback) override {}
private: private:
std::string last_connected_tether_network_guid_; std::string last_connected_tether_network_guid_;
......
...@@ -58,9 +58,8 @@ const char NetworkConnectionHandler::kErrorUnmanagedNetwork[] = ...@@ -58,9 +58,8 @@ const char NetworkConnectionHandler::kErrorUnmanagedNetwork[] =
const char NetworkConnectionHandler::kErrorActivateFailed[] = "activate-failed"; const char NetworkConnectionHandler::kErrorActivateFailed[] = "activate-failed";
const char NetworkConnectionHandler::kErrorEnabledOrDisabledWhenNotAvailable[] = const char NetworkConnectionHandler::kErrorEnabledOrDisabledWhenNotAvailable[] =
"not-available"; "not-available";
const char const char NetworkConnectionHandler::kErrorTetherAttemptWithNoDelegate[] =
NetworkConnectionHandler::kErrorTetherConnectionAttemptWithNoDelegate[] = "tether-with-no-delegate";
"tether-with-no-delegate";
NetworkConnectionHandler::NetworkConnectionHandler() NetworkConnectionHandler::NetworkConnectionHandler()
: tether_delegate_(nullptr), weak_ptr_factory_(this) {} : tether_delegate_(nullptr), weak_ptr_factory_(this) {}
...@@ -117,4 +116,20 @@ void NetworkConnectionHandler::InitiateTetherNetworkConnection( ...@@ -117,4 +116,20 @@ void NetworkConnectionHandler::InitiateTetherNetworkConnection(
weak_ptr_factory_.GetWeakPtr(), tether_network_guid, weak_ptr_factory_.GetWeakPtr(), tether_network_guid,
error_callback)); error_callback));
} }
void NetworkConnectionHandler::InitiateTetherNetworkDisconnection(
const std::string& tether_network_guid,
const base::Closure& success_callback,
const network_handler::ErrorCallback& error_callback) {
DCHECK(tether_delegate_);
tether_delegate_->DisconnectFromNetwork(
tether_network_guid,
base::Bind(&NetworkConnectionHandler::InvokeConnectSuccessCallback,
weak_ptr_factory_.GetWeakPtr(), tether_network_guid,
success_callback),
base::Bind(&NetworkConnectionHandler::InvokeConnectErrorCallback,
weak_ptr_factory_.GetWeakPtr(), tether_network_guid,
error_callback));
}
} // namespace chromeos } // namespace chromeos
...@@ -74,7 +74,7 @@ class CHROMEOS_EXPORT NetworkConnectionHandler { ...@@ -74,7 +74,7 @@ class CHROMEOS_EXPORT NetworkConnectionHandler {
// connecting. // connecting.
static const char kErrorConnectFailed[]; static const char kErrorConnectFailed[];
// An unexpected DBus or Shill error occurred while disconnecting. // An unexpected DBus, Shill, or Tether error occurred while disconnecting.
static const char kErrorDisconnectFailed[]; static const char kErrorDisconnectFailed[];
// A new network connect request canceled this one. // A new network connect request canceled this one.
...@@ -95,8 +95,9 @@ class CHROMEOS_EXPORT NetworkConnectionHandler { ...@@ -95,8 +95,9 @@ class CHROMEOS_EXPORT NetworkConnectionHandler {
// Network was enabled/disabled when it was not available. // Network was enabled/disabled when it was not available.
static const char kErrorEnabledOrDisabledWhenNotAvailable[]; static const char kErrorEnabledOrDisabledWhenNotAvailable[];
// Connection to Tether network attempted when no tether delegate present. // Connection or disconnection to Tether network attempted when no tether
static const char kErrorTetherConnectionAttemptWithNoDelegate[]; // delegate present.
static const char kErrorTetherAttemptWithNoDelegate[];
class CHROMEOS_EXPORT TetherDelegate { class CHROMEOS_EXPORT TetherDelegate {
public: public:
...@@ -108,6 +109,14 @@ class CHROMEOS_EXPORT NetworkConnectionHandler { ...@@ -108,6 +109,14 @@ class CHROMEOS_EXPORT NetworkConnectionHandler {
const base::Closure& success_callback, const base::Closure& success_callback,
const network_handler::StringResultCallback& error_callback) = 0; const network_handler::StringResultCallback& error_callback) = 0;
// Disconnects from the Tether network with GUID |tether_network_guid|. On
// success, invokes |success_callback|, and on failure, invokes
// |error_callback|, passing the relevant error code declared above.
virtual void DisconnectFromNetwork(
const std::string& tether_network_guid,
const base::Closure& success_callback,
const network_handler::StringResultCallback& error_callback) = 0;
protected: protected:
virtual ~TetherDelegate() {} virtual ~TetherDelegate() {}
}; };
...@@ -179,6 +188,12 @@ class CHROMEOS_EXPORT NetworkConnectionHandler { ...@@ -179,6 +188,12 @@ class CHROMEOS_EXPORT NetworkConnectionHandler {
const base::Closure& success_callback, const base::Closure& success_callback,
const network_handler::ErrorCallback& error_callback); const network_handler::ErrorCallback& error_callback);
// Initiates a disconnection from a Tether network.
void InitiateTetherNetworkDisconnection(
const std::string& tether_network_guid,
const base::Closure& success_callback,
const network_handler::ErrorCallback& error_callback);
base::ObserverList<NetworkConnectionObserver, true> observers_; base::ObserverList<NetworkConnectionObserver, true> observers_;
// Delegate used to start a connection to a tether network. // Delegate used to start a connection to a tether network.
......
...@@ -241,7 +241,7 @@ void NetworkConnectionHandlerImpl::ConnectToNetwork( ...@@ -241,7 +241,7 @@ void NetworkConnectionHandlerImpl::ConnectToNetwork(
error_callback); error_callback);
} else { } else {
InvokeConnectErrorCallback(service_path, error_callback, InvokeConnectErrorCallback(service_path, error_callback,
kErrorTetherConnectionAttemptWithNoDelegate); kErrorTetherAttemptWithNoDelegate);
} }
return; return;
} }
...@@ -305,6 +305,18 @@ void NetworkConnectionHandlerImpl::DisconnectNetwork( ...@@ -305,6 +305,18 @@ void NetworkConnectionHandlerImpl::DisconnectNetwork(
kErrorNotConnected, ""); kErrorNotConnected, "");
return; return;
} }
if (NetworkTypePattern::Tether().MatchesType(network->type())) {
if (tether_delegate_) {
const std::string& tether_network_guid = network->guid();
DCHECK(!tether_network_guid.empty());
InitiateTetherNetworkDisconnection(tether_network_guid, success_callback,
error_callback);
} else {
InvokeConnectErrorCallback(service_path, error_callback,
kErrorTetherAttemptWithNoDelegate);
}
return;
}
pending_requests_.erase(service_path); pending_requests_.erase(service_path);
CallShillDisconnect(service_path, success_callback, error_callback); CallShillDisconnect(service_path, success_callback, error_callback);
} }
......
...@@ -62,7 +62,7 @@ class CHROMEOS_EXPORT NetworkProfileHandler ...@@ -62,7 +62,7 @@ class CHROMEOS_EXPORT NetworkProfileHandler
protected: protected:
friend class AutoConnectHandlerTest; friend class AutoConnectHandlerTest;
friend class ClientCertResolverTest; friend class ClientCertResolverTest;
friend class NetworkConnectionHandlerTest; friend class NetworkConnectionHandlerImplTest;
friend class NetworkHandler; friend class NetworkHandler;
friend class ProhibitedTechnologiesHandlerTest; friend class ProhibitedTechnologiesHandlerTest;
NetworkProfileHandler(); NetworkProfileHandler();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment