diff options
-rw-r--r-- | chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.cc | 91 | ||||
-rw-r--r-- | chromeos/network/network_device_handler.cc | 12 | ||||
-rw-r--r-- | chromeos/network/network_device_handler.h | 12 |
3 files changed, 90 insertions, 25 deletions
diff --git a/chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.cc b/chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.cc index ab318e1..c5123cb 100644 --- a/chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.cc +++ b/chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.cc @@ -9,19 +9,25 @@ #include "base/bind.h" #include "base/bind_helpers.h" +#include "base/location.h" #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/values.h" -#include "chrome/browser/chromeos/cros/network_library.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/url_constants.h" +#include "chromeos/network/device_state.h" +#include "chromeos/network/network_device_handler.h" +#include "chromeos/network/network_event_log.h" +#include "chromeos/network/network_state_handler.h" +#include "chromeos/network/network_state_handler_observer.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_message_handler.h" #include "grit/browser_resources.h" #include "grit/generated_resources.h" +#include "third_party/cros_system_api/dbus/service_constants.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" @@ -68,9 +74,24 @@ content::WebUIDataSource* CreateChooseMobileNetworkUIHTMLSource() { return source; } +chromeos::NetworkDeviceHandler* GetNetworkDeviceHandler() { + return chromeos::NetworkHandler::Get()->network_device_handler(); +} + +chromeos::NetworkStateHandler* GetNetworkStateHandler() { + return chromeos::NetworkHandler::Get()->network_state_handler(); +} + +void NetworkOperationErrorCallback( + const std::string& operation_name, + const std::string& error_name, + scoped_ptr<base::DictionaryValue> error_data) { + NET_LOG_ERROR("Operation failed: " + error_name, operation_name); +} + class ChooseMobileNetworkHandler : public WebUIMessageHandler, - public NetworkLibrary::NetworkDeviceObserver { + public NetworkStateHandlerObserver { public: ChooseMobileNetworkHandler(); virtual ~ChooseMobileNetworkHandler(); @@ -78,9 +99,8 @@ class ChooseMobileNetworkHandler // WebUIMessageHandler implementation. virtual void RegisterMessages() OVERRIDE; - // NetworkDeviceObserver implementation. - virtual void OnNetworkDeviceFoundNetworks( - NetworkLibrary* cros, const NetworkDevice* device) OVERRIDE; + // NetworkStateHandlerObserver implementation. + virtual void DeviceListChanged() OVERRIDE; private: // Handlers for JS WebUI messages. @@ -99,20 +119,27 @@ class ChooseMobileNetworkHandler // ChooseMobileNetworkHandler implementation. ChooseMobileNetworkHandler::ChooseMobileNetworkHandler() - : is_page_ready_(false), has_pending_results_(false) { - NetworkLibrary* cros = NetworkLibrary::Get(); - if (const NetworkDevice* cellular = cros->FindCellularDevice()) { - device_path_ = cellular->device_path(); - cros->AddNetworkDeviceObserver(device_path_, this); + : is_page_ready_(false), + has_pending_results_(false) { + NetworkStateHandler* handler = GetNetworkStateHandler(); + const DeviceState* cellular = handler->GetDeviceStateByType( + flimflam::kTypeCellular); + if (!cellular) { + NET_LOG_ERROR( + "A cellular device is not available.", + "Cannot initiate a cellular network scan without a cellular device."); + return; } - cros->RequestCellularScan(); + handler->AddObserver(this, FROM_HERE); + device_path_ = cellular->path(); + GetNetworkDeviceHandler()->ProposeScan( + device_path_, + base::Bind(&base::DoNothing), + base::Bind(&NetworkOperationErrorCallback, "ProposeScan")); } ChooseMobileNetworkHandler::~ChooseMobileNetworkHandler() { - if (!device_path_.empty()) { - NetworkLibrary* cros = NetworkLibrary::Get(); - cros->RemoveNetworkDeviceObserver(device_path_, this); - } + GetNetworkStateHandler()->RemoveObserver(this, FROM_HERE); } void ChooseMobileNetworkHandler::RegisterMessages() { @@ -130,14 +157,20 @@ void ChooseMobileNetworkHandler::RegisterMessages() { base::Unretained(this))); } -void ChooseMobileNetworkHandler::OnNetworkDeviceFoundNetworks( - NetworkLibrary* cros, - const NetworkDevice* device) { +void ChooseMobileNetworkHandler::DeviceListChanged() { + const DeviceState* cellular = GetNetworkStateHandler()->GetDeviceState( + device_path_); networks_list_.Clear(); + if (!cellular) { + LOG(WARNING) << "Cellular device with path '" << device_path_ + << "' disappeared."; + return; + } + const DeviceState::CellularScanResults& scan_results = + cellular->scan_results(); std::set<std::string> network_ids; - const CellularNetworkList& found_networks = device->found_cellular_networks(); - for (CellularNetworkList::const_iterator it = found_networks.begin(); - it != found_networks.end(); ++it) { + for (DeviceState::CellularScanResults::const_iterator it = + scan_results.begin(); it != scan_results.end(); ++it) { // We need to remove duplicates from the list because same network with // different technologies are listed multiple times. But ModemManager // Register API doesn't allow technology to be specified so just show unique @@ -173,8 +206,12 @@ void ChooseMobileNetworkHandler::HandleCancel(const ListValue* args) { } // Switch to automatic mode. - NetworkLibrary* cros = NetworkLibrary::Get(); - cros->RequestCellularRegister(std::string()); + GetNetworkDeviceHandler()->RegisterCellularNetwork( + device_path_, + "", // An empty string is for registration with the home network. + base::Bind(&base::DoNothing), + base::Bind(&NetworkOperationErrorCallback, + "Register in automatic mode.")); } void ChooseMobileNetworkHandler::HandleConnect(const ListValue* args) { @@ -186,8 +223,12 @@ void ChooseMobileNetworkHandler::HandleConnect(const ListValue* args) { return; } - NetworkLibrary* cros = NetworkLibrary::Get(); - cros->RequestCellularRegister(network_id); + GetNetworkDeviceHandler()->RegisterCellularNetwork( + device_path_, + network_id, + base::Bind(&base::DoNothing), + base::Bind(&NetworkOperationErrorCallback, + std::string("Register to network: ") + network_id)); } void ChooseMobileNetworkHandler::HandlePageReady(const ListValue* args) { diff --git a/chromeos/network/network_device_handler.cc b/chromeos/network/network_device_handler.cc index 8933003..c480073 100644 --- a/chromeos/network/network_device_handler.cc +++ b/chromeos/network/network_device_handler.cc @@ -178,6 +178,18 @@ void NetworkDeviceHandler::ProposeScan( base::Bind(&ProposeScanCallback, device_path, callback, error_callback)); } +void NetworkDeviceHandler::RegisterCellularNetwork( + const std::string& device_path, + const std::string& network_id, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback) { + DBusThreadManager::Get()->GetShillDeviceClient()->Register( + dbus::ObjectPath(device_path), + network_id, + callback, + base::Bind(&HandleShillCallFailure, device_path, error_callback)); +} + void NetworkDeviceHandler::SetCarrier( const std::string& device_path, const std::string& carrier, diff --git a/chromeos/network/network_device_handler.h b/chromeos/network/network_device_handler.h index 300cbf5..7cb2f52 100644 --- a/chromeos/network/network_device_handler.h +++ b/chromeos/network/network_device_handler.h @@ -90,6 +90,18 @@ class CHROMEOS_EXPORT NetworkDeviceHandler { const base::Closure& callback, const network_handler::ErrorCallback& error_callback); + // Tells the device specified by |device_path| to register to the cellular + // network with id |network_id|. If |network_id| is empty then registration + // will proceed in automatic mode, which will cause the modem to register + // with the home network. + // This call is only available on cellular devices and will fail with + // Error.NotSupported on all other technologies. + void RegisterCellularNetwork( + const std::string& device_path, + const std::string& network_id, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback); + // Tells the device to set the modem carrier firmware, as specified by // |carrier|. // |