diff options
author | gauravsh@chromium.org <gauravsh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-30 01:11:35 +0000 |
---|---|---|
committer | gauravsh@chromium.org <gauravsh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-30 01:11:35 +0000 |
commit | 7799df37276fd11b497546261f427930348d2121 (patch) | |
tree | c16be35a7dd4ab634e6ddf758949896efb826d31 /chromeos | |
parent | d9fce6725ec0812d04c4015e5b2d1c9e539afe1b (diff) | |
download | chromium_src-7799df37276fd11b497546261f427930348d2121.zip chromium_src-7799df37276fd11b497546261f427930348d2121.tar.gz chromium_src-7799df37276fd11b497546261f427930348d2121.tar.bz2 |
Switch over MobileActivator to use Network*Handler
Add a NetworkActivationHandler for handling cellular activation calls to Shill.
BUG=188753
TEST=tested Verizon LTE (on link) and Verizon 3g (on Lumpy) activation
Review URL: https://chromiumcodereview.appspot.com/22611005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220463 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r-- | chromeos/chromeos.gyp | 2 | ||||
-rw-r--r-- | chromeos/network/network_activation_handler.cc | 75 | ||||
-rw-r--r-- | chromeos/network/network_activation_handler.h | 78 | ||||
-rw-r--r-- | chromeos/network/network_connection_handler.cc | 40 | ||||
-rw-r--r-- | chromeos/network/network_connection_handler.h | 22 | ||||
-rw-r--r-- | chromeos/network/network_handler.cc | 6 | ||||
-rw-r--r-- | chromeos/network/network_handler.h | 3 | ||||
-rw-r--r-- | chromeos/network/network_state.h | 1 | ||||
-rw-r--r-- | chromeos/network/network_state_handler.cc | 8 | ||||
-rw-r--r-- | chromeos/network/network_state_handler.h | 4 |
10 files changed, 176 insertions, 63 deletions
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index dae10d7..83cd921 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp @@ -233,6 +233,8 @@ 'network/managed_network_configuration_handler_impl.h', 'network/managed_state.cc', 'network/managed_state.h', + 'network/network_activation_handler.cc', + 'network/network_activation_handler.h', 'network/network_cert_migrator.cc', 'network/network_cert_migrator.h', 'network/network_change_notifier_chromeos.cc', diff --git a/chromeos/network/network_activation_handler.cc b/chromeos/network/network_activation_handler.cc new file mode 100644 index 0000000..90ed374 --- /dev/null +++ b/chromeos/network/network_activation_handler.cc @@ -0,0 +1,75 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/network/network_activation_handler.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/shill_service_client.h" +#include "chromeos/network/network_event_log.h" +#include "chromeos/network/network_handler.h" +#include "dbus/object_proxy.h" + +namespace chromeos { + +// static +const char NetworkActivationHandler::kErrorShillError[] = "shill-error"; + +NetworkActivationHandler::NetworkActivationHandler() {} +NetworkActivationHandler::~NetworkActivationHandler() {} + +void NetworkActivationHandler::Activate( + const std::string& service_path, + const std::string& carrier, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback) { + NET_LOG_USER("ActivateNetwork", service_path); + CallShillActivate(service_path, carrier, success_callback, error_callback); +} + +void NetworkActivationHandler::CompleteActivation( + const std::string& service_path, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback) { + NET_LOG_USER("CompleteActivation", service_path); + CallShillCompleteActivation(service_path, success_callback, error_callback); +} + +void NetworkActivationHandler::CallShillActivate( + const std::string& service_path, + const std::string& carrier, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback) { + NET_LOG_USER("Activation Request", service_path + ": '" + carrier + "'"); + DBusThreadManager::Get()->GetShillServiceClient()->ActivateCellularModem( + dbus::ObjectPath(service_path), + carrier, + base::Bind(&NetworkActivationHandler::HandleShillSuccess, + AsWeakPtr(), service_path, success_callback), + base::Bind(&network_handler::ShillErrorCallbackFunction, + kErrorShillError, service_path, error_callback)); +} + +void NetworkActivationHandler::CallShillCompleteActivation( + const std::string& service_path, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback) { + NET_LOG_USER("CompleteActivation Request", service_path); + DBusThreadManager::Get()->GetShillServiceClient()->CompleteCellularActivation( + dbus::ObjectPath(service_path), + base::Bind(&NetworkActivationHandler::HandleShillSuccess, + AsWeakPtr(), service_path, success_callback), + base::Bind(&network_handler::ShillErrorCallbackFunction, + kErrorShillError, service_path, error_callback)); +} + +void NetworkActivationHandler::HandleShillSuccess( + const std::string& service_path, + const base::Closure& success_callback) { + if (!success_callback.is_null()) + success_callback.Run(); +} + +} // namespace chromeos diff --git a/chromeos/network/network_activation_handler.h b/chromeos/network/network_activation_handler.h new file mode 100644 index 0000000..f15c73d --- /dev/null +++ b/chromeos/network/network_activation_handler.h @@ -0,0 +1,78 @@ +// Copyright 2013 The Chromium 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 CHROMEOS_NETWORK_NETWORK_ACTIVATION_HANDLER_H_ +#define CHROMEOS_NETWORK_NETWORK_ACTIVATION_HANDLER_H_ + +#include <string> + +#include "base/basictypes.h" +#include "base/memory/weak_ptr.h" +#include "chromeos/chromeos_export.h" +#include "chromeos/network/network_handler_callbacks.h" + +namespace chromeos { + +// The NetworkActivationHandler class allows making service specific +// calls required for activation on mobile networks. +class CHROMEOS_EXPORT NetworkActivationHandler + : public base::SupportsWeakPtr<NetworkActivationHandler> { + public: + // Constants for |error_name| from |error_callback|. + // TODO(gauravsh): Merge various error constants from Network*Handlers into + // a single place. crbug.com/272554 + static const char kErrorNotFound[]; + static const char kErrorShillError[]; + + virtual ~NetworkActivationHandler(); + + // ActivateNetwork() will start an asynchronous activation attempt. + // |carrier| may be empty or may specify a carrier to activate. + // On success, |success_callback| will be called. + // On failure, |error_callback| will be called with |error_name| one of: + // kErrorNotFound if no network matching |service_path| is found. + // kErrorShillError if a DBus or Shill error occurred. + void Activate(const std::string& service_path, + const std::string& carrier, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback); + + // CompleteActivation() will start an asynchronous activation completion + // attempt. + // On success, |success_callback| will be called. + // On failure, |error_callback| will be called with |error_name| one of: + // kErrorNotFound if no network matching |service_path| is found. + // kErrorShillError if a DBus or Shill error occurred. + void CompleteActivation(const std::string& service_path, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback); + + private: + friend class NetworkHandler; + + NetworkActivationHandler(); + + // Calls Shill.Service.ActivateCellularModem asynchronously. + void CallShillActivate(const std::string& service_path, + const std::string& carrier, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback); + + // Calls Shill.Service.CompleteCellularActivation asynchronously. + void CallShillCompleteActivation( + const std::string& service_path, + const base::Closure& success_callback, + const network_handler::ErrorCallback& error_callback); + + // Handle success from Shill.Service.ActivateCellularModem or + // Shill.Service.CompleteCellularActivation. + void HandleShillSuccess(const std::string& service_path, + const base::Closure& success_callback); + + DISALLOW_COPY_AND_ASSIGN(NetworkActivationHandler); +}; + +} // namespace chromeos + +#endif // CHROMEOS_NETWORK_NETWORK_ACTIVATION_HANDLER_H_ diff --git a/chromeos/network/network_connection_handler.cc b/chromeos/network/network_connection_handler.cc index f27ff4f..151d8f6 100644 --- a/chromeos/network/network_connection_handler.cc +++ b/chromeos/network/network_connection_handler.cc @@ -314,21 +314,6 @@ void NetworkConnectionHandler::DisconnectNetwork( CallShillDisconnect(service_path, success_callback, error_callback); } -void NetworkConnectionHandler::ActivateNetwork( - const std::string& service_path, - const std::string& carrier, - const base::Closure& success_callback, - const network_handler::ErrorCallback& error_callback) { - NET_LOG_USER("DisconnectNetwork", service_path); - const NetworkState* network = - network_state_handler_->GetNetworkState(service_path); - if (!network) { - InvokeErrorCallback(service_path, error_callback, kErrorNotFound); - return; - } - CallShillActivate(service_path, carrier, success_callback, error_callback); -} - bool NetworkConnectionHandler::HasConnectingNetwork( const std::string& service_path) { return pending_requests_.count(service_path) != 0; @@ -696,29 +681,4 @@ void NetworkConnectionHandler::HandleShillDisconnectSuccess( success_callback.Run(); } -// Activate - -void NetworkConnectionHandler::CallShillActivate( - const std::string& service_path, - const std::string& carrier, - const base::Closure& success_callback, - const network_handler::ErrorCallback& error_callback) { - NET_LOG_USER("Activate Request", service_path + ": '" + carrier + "'"); - DBusThreadManager::Get()->GetShillServiceClient()->ActivateCellularModem( - dbus::ObjectPath(service_path), - carrier, - base::Bind(&NetworkConnectionHandler::HandleShillActivateSuccess, - AsWeakPtr(), service_path, success_callback), - base::Bind(&network_handler::ShillErrorCallbackFunction, - kErrorShillError, service_path, error_callback)); -} - -void NetworkConnectionHandler::HandleShillActivateSuccess( - const std::string& service_path, - const base::Closure& success_callback) { - NET_LOG_EVENT("Activate Request Sent", service_path); - if (!success_callback.is_null()) - success_callback.Run(); -} - } // namespace chromeos diff --git a/chromeos/network/network_connection_handler.h b/chromeos/network/network_connection_handler.h index 4b363ef..17abf01 100644 --- a/chromeos/network/network_connection_handler.h +++ b/chromeos/network/network_connection_handler.h @@ -101,18 +101,6 @@ class CHROMEOS_EXPORT NetworkConnectionHandler const base::Closure& success_callback, const network_handler::ErrorCallback& error_callback); - // ActivateNetwork() will start an asynchronous activation attempt. - // |carrier| may be empty or may specify a carrier to activate. - // On success, |success_callback| will be called. - // On failure, |error_callback| will be called with |error_name| one of: - // kErrorNotFound if no network matching |service_path| is found. - // kErrorShillError if a DBus or Shill error occurred. - // TODO(stevenjb/armansito): Move this to a separate NetworkActivationHandler. - void ActivateNetwork(const std::string& service_path, - const std::string& carrier, - const base::Closure& success_callback, - const network_handler::ErrorCallback& error_callback); - // Returns true if ConnectToNetwork has been called with |service_path| and // has not completed (i.e. success or error callback has been called). bool HasConnectingNetwork(const std::string& service_path); @@ -187,16 +175,6 @@ class CHROMEOS_EXPORT NetworkConnectionHandler void HandleShillDisconnectSuccess(const std::string& service_path, const base::Closure& success_callback); - // Calls Shill.Manager.Activate asynchronously. - void CallShillActivate( - const std::string& service_path, - const std::string& carrier, - const base::Closure& success_callback, - const network_handler::ErrorCallback& error_callback); - - // Handle success from Shill.Service.ActivateCellularModem. - void HandleShillActivateSuccess(const std::string& service_path, - const base::Closure& success_callback); // Local references to the associated handler instances. CertLoader* cert_loader_; diff --git a/chromeos/network/network_handler.cc b/chromeos/network/network_handler.cc index 47606ae..15ede66 100644 --- a/chromeos/network/network_handler.cc +++ b/chromeos/network/network_handler.cc @@ -9,6 +9,7 @@ #include "chromeos/network/client_cert_resolver.h" #include "chromeos/network/geolocation_handler.h" #include "chromeos/network/managed_network_configuration_handler_impl.h" +#include "chromeos/network/network_activation_handler.h" #include "chromeos/network/network_cert_migrator.h" #include "chromeos/network/network_configuration_handler.h" #include "chromeos/network/network_connection_handler.h" @@ -40,6 +41,7 @@ NetworkHandler::NetworkHandler() network_cert_migrator_.reset(new NetworkCertMigrator()); client_cert_resolver_.reset(new ClientCertResolver()); } + network_activation_handler_.reset(new NetworkActivationHandler()); network_connection_handler_.reset(new NetworkConnectionHandler()); network_sms_handler_.reset(new NetworkSmsHandler()); geolocation_handler_.reset(new GeolocationHandler()); @@ -116,6 +118,10 @@ NetworkHandler::managed_network_configuration_handler() { return managed_network_configuration_handler_.get(); } +NetworkActivationHandler* NetworkHandler::network_activation_handler() { + return network_activation_handler_.get(); +} + NetworkConnectionHandler* NetworkHandler::network_connection_handler() { return network_connection_handler_.get(); } diff --git a/chromeos/network/network_handler.h b/chromeos/network/network_handler.h index 2197529..bbb9e9c 100644 --- a/chromeos/network/network_handler.h +++ b/chromeos/network/network_handler.h @@ -17,6 +17,7 @@ class ClientCertResolver; class GeolocationHandler; class ManagedNetworkConfigurationHandler; class ManagedNetworkConfigurationHandlerImpl; +class NetworkActivationHandler; class NetworkCertMigrator; class NetworkConfigurationHandler; class NetworkConnectionHandler; @@ -54,6 +55,7 @@ class CHROMEOS_EXPORT NetworkHandler { NetworkProfileHandler* network_profile_handler(); NetworkConfigurationHandler* network_configuration_handler(); ManagedNetworkConfigurationHandler* managed_network_configuration_handler(); + NetworkActivationHandler* network_activation_handler(); NetworkConnectionHandler* network_connection_handler(); NetworkSmsHandler* network_sms_handler(); GeolocationHandler* geolocation_handler(); @@ -74,6 +76,7 @@ class CHROMEOS_EXPORT NetworkHandler { managed_network_configuration_handler_; scoped_ptr<NetworkCertMigrator> network_cert_migrator_; scoped_ptr<ClientCertResolver> client_cert_resolver_; + scoped_ptr<NetworkActivationHandler> network_activation_handler_; scoped_ptr<NetworkConnectionHandler> network_connection_handler_; scoped_ptr<NetworkSmsHandler> network_sms_handler_; scoped_ptr<GeolocationHandler> geolocation_handler_; diff --git a/chromeos/network/network_state.h b/chromeos/network/network_state.h index 5752057..62edc03 100644 --- a/chromeos/network/network_state.h +++ b/chromeos/network/network_state.h @@ -116,6 +116,7 @@ class CHROMEOS_EXPORT NetworkState : public ManagedState { const base::DictionaryValue& properties); private: + friend class MobileActivatorTest; friend class NetworkStateHandler; friend class NetworkChangeNotifierChromeosUpdateTest; diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc index 878e152..eadc2ca 100644 --- a/chromeos/network/network_state_handler.cc +++ b/chromeos/network/network_state_handler.cc @@ -278,6 +278,11 @@ std::string NetworkStateHandler::FormattedHardwareAddressForType( } void NetworkStateHandler::GetNetworkList(NetworkStateList* list) const { + GetNetworkListByType(kMatchTypeDefault, list); +} + +void NetworkStateHandler::GetNetworkListByType(const std::string& type, + NetworkStateList* list) const { DCHECK(list); list->clear(); for (ManagedStateList::const_iterator iter = network_list_.begin(); @@ -286,7 +291,8 @@ void NetworkStateHandler::GetNetworkList(NetworkStateList* list) const { continue; const NetworkState* network = (*iter)->AsNetworkState(); DCHECK(network); - list->push_back(network); + if (ManagedStateMatchesType(network, type)) + list->push_back(network); } } diff --git a/chromeos/network/network_state_handler.h b/chromeos/network/network_state_handler.h index 3ae7126..9ad3ac8 100644 --- a/chromeos/network/network_state_handler.h +++ b/chromeos/network/network_state_handler.h @@ -150,6 +150,10 @@ class CHROMEOS_EXPORT NetworkStateHandler // only on the UI thread). void GetNetworkList(NetworkStateList* list) const; + // Like GetNetworkList() but only returns networks with matching |type|. + void GetNetworkListByType(const std::string& type, + NetworkStateList* list) const; + // Sets |list| to contain the list of devices. The returned list contains // a copy of DeviceState pointers which should not be stored or used beyond // the scope of the calling function (i.e. they may later become invalid, but |