| Index: chrome/browser/chromeos/login/network_screen.cc
|
| diff --git a/chrome/browser/chromeos/login/network_screen.cc b/chrome/browser/chromeos/login/network_screen.cc
|
| index 93c4d3fafcb56a78e7aeb780dcb87ea644f9677d..ab003f01e0a7b4e8691be3067eb8eaf91f01b16c 100644
|
| --- a/chrome/browser/chromeos/login/network_screen.cc
|
| +++ b/chrome/browser/chromeos/login/network_screen.cc
|
| @@ -28,15 +28,10 @@ namespace chromeos {
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // NetworkScreen, public:
|
|
|
| -NetworkScreen::NetworkScreen(WizardScreenDelegate* delegate, bool is_out_of_box)
|
| +NetworkScreen::NetworkScreen(WizardScreenDelegate* delegate)
|
| : ViewScreen<NetworkSelectionView>(delegate),
|
| is_network_subscribed_(false),
|
| - wifi_disabled_(false),
|
| - is_out_of_box_(is_out_of_box),
|
| - is_waiting_for_connect_(false),
|
| - continue_pressed_(false),
|
| - ethernet_preselected_(false),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) {
|
| + continue_pressed_(false) {
|
| }
|
|
|
| NetworkScreen::~NetworkScreen() {
|
| @@ -44,86 +39,17 @@ NetworkScreen::~NetworkScreen() {
|
| UnsubscribeNetworkNotification();
|
| }
|
|
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// ComboboxModel implementation:
|
| -
|
| -int NetworkScreen::GetItemCount() {
|
| - // Item with index = 0 is either "no networks are available" or
|
| - // "no selection".
|
| - // If WiFi is disabled adding extra item to enable it.
|
| - return static_cast<int>(networks_.GetNetworkCount()) + 1 +
|
| - (wifi_disabled_ ? 1 : 0);
|
| -}
|
| -
|
| -string16 NetworkScreen::GetItemAt(int index) {
|
| - if (index == 0) {
|
| - return networks_.IsEmpty() ?
|
| - l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE) :
|
| - l10n_util::GetStringUTF16(IDS_NETWORK_SELECTION_NONE);
|
| - }
|
| - if (wifi_disabled_ &&
|
| - index == static_cast<int>(networks_.GetNetworkCount()) + 1) {
|
| - return l10n_util::GetStringFUTF16(
|
| - IDS_STATUSBAR_NETWORK_DEVICE_ENABLE,
|
| - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI));
|
| - }
|
| - NetworkList::NetworkItem* network =
|
| - networks_.GetNetworkAt(index - 1);
|
| - return network ? network->label : string16();
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// views::Combobox::Listener implementation:
|
| -
|
| -void NetworkScreen::ItemChanged(views::Combobox* sender,
|
| - int prev_index,
|
| - int new_index) {
|
| - view()->EnableContinue(new_index > 0);
|
| - // Corner case: item with index 0 is "No selection". Just select it.
|
| - if (new_index == prev_index || new_index <= 0 || prev_index < 0)
|
| - return;
|
| -
|
| - if (wifi_disabled_ &&
|
| - new_index == static_cast<int>(networks_.GetNetworkCount()) + 1) {
|
| - view()->EnableContinue(false);
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - task_factory_.NewRunnableMethod(&NetworkScreen::EnableWiFi));
|
| - return;
|
| - }
|
| -
|
| - if (networks_.IsEmpty())
|
| - return;
|
| -
|
| - // Connect to network as early as possible.
|
| - const NetworkList::NetworkItem* network =
|
| - networks_.GetNetworkAt(new_index - 1);
|
| - MessageLoop::current()->PostTask(FROM_HERE, task_factory_.NewRunnableMethod(
|
| - &NetworkScreen::ConnectToNetwork, network->network_type, network->label));
|
| -}
|
| -
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // views::ButtonListener implementation:
|
|
|
| void NetworkScreen::ButtonPressed(views::Button* sender,
|
| const views::Event& event) {
|
| - // Proceed only when selected network is connected.
|
| - const NetworkList::NetworkItem* network = GetSelectedNetwork();
|
| - if (!network)
|
| - return;
|
| - if (networks_.IsNetworkConnected(network->network_type, network->label)) {
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - task_factory_.NewRunnableMethod(&NetworkScreen::NotifyOnConnection));
|
| + NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary();
|
| + if (network && network->Connected()) {
|
| + NotifyOnConnection();
|
| } else {
|
| continue_pressed_ = true;
|
| - if (is_waiting_for_connect_) {
|
| - ShowConnectingStatus();
|
| - } else {
|
| - MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - task_factory_.NewRunnableMethod(&NetworkScreen::ConnectToNetwork,
|
| - network->network_type,
|
| - network->label));
|
| - }
|
| + WaitForConnection(network_id_);
|
| }
|
| }
|
|
|
| @@ -131,58 +57,7 @@ void NetworkScreen::ButtonPressed(views::Button* sender,
|
| // NetworkLibrary::Observer implementation:
|
|
|
| void NetworkScreen::NetworkChanged(NetworkLibrary* network_lib) {
|
| - if (!view())
|
| - return;
|
| -
|
| - // TODO(nkostylev): Reuse network menu button - http://crosbug.com/4133
|
| - wifi_disabled_ = !chromeos::CrosLibrary::Get()->
|
| - GetNetworkLibrary()->wifi_enabled();
|
| -
|
| - // Save network selection in case it would be available after refresh.
|
| - NetworkList::NetworkType network_type = NetworkList::NETWORK_EMPTY;
|
| - string16 network_id;
|
| - const NetworkList::NetworkItem* selected_network = GetSelectedNetwork();
|
| - if (selected_network) {
|
| - network_type = selected_network->network_type;
|
| - network_id = selected_network->label;
|
| - }
|
| - networks_.NetworkChanged(network_lib);
|
| - if (is_waiting_for_connect_ &&
|
| - networks_.IsNetworkConnected(connecting_network_.network_type,
|
| - connecting_network_.label)) {
|
| - // Stop waiting & don't update spinner status.
|
| - StopWaitingForConnection(false);
|
| - if (continue_pressed_) {
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - task_factory_.NewRunnableMethod(&NetworkScreen::NotifyOnConnection));
|
| - return;
|
| - }
|
| - }
|
| - view()->NetworkModelChanged();
|
| - // Prefer Ethernet when it's connected (only once).
|
| - if (!ethernet_preselected_ &&
|
| - networks_.IsNetworkConnected(NetworkList::NETWORK_ETHERNET, string16())) {
|
| - ethernet_preselected_ = true;
|
| - SelectNetwork(NetworkList::NETWORK_ETHERNET, string16());
|
| - } else {
|
| - SelectNetwork(network_type, network_id);
|
| - }
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// NetworkLibrary::Observer implementation:
|
| -
|
| -void NetworkScreen::OnDialogAccepted() {
|
| - const NetworkList::NetworkItem* network = GetSelectedNetwork();
|
| - if (network)
|
| - WaitForConnection(network);
|
| -}
|
| -
|
| -void NetworkScreen::OnDialogCancelled() {
|
| - if (view()) {
|
| - view()->EnableContinue(false);
|
| - view()->SetSelectedNetworkItem(0);
|
| - }
|
| + UpdateStatus(network_lib);
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -210,37 +85,6 @@ void NetworkScreen::Refresh() {
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // NetworkScreen, private:
|
|
|
| -void NetworkScreen::ConnectToNetwork(NetworkList::NetworkType type,
|
| - const string16& id) {
|
| - const NetworkList::NetworkItem* network =
|
| - networks_.GetNetworkById(type, id);
|
| - if (network &&
|
| - !networks_.IsNetworkConnected(type, id)) {
|
| - if (NetworkList::NETWORK_WIFI == network->network_type) {
|
| - if (network->wifi_network.encrypted()) {
|
| - OpenPasswordDialog(network->wifi_network);
|
| - return;
|
| - } else {
|
| - WaitForConnection(network);
|
| - chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
|
| - ConnectToWifiNetwork(network->wifi_network,
|
| - std::string(), std::string(), std::string());
|
| - }
|
| - } else if (NetworkList::NETWORK_CELLULAR == network->network_type) {
|
| - WaitForConnection(network);
|
| - chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
|
| - ConnectToCellularNetwork(network->cellular_network);
|
| - }
|
| - }
|
| -}
|
| -
|
| -void NetworkScreen::EnableWiFi() {
|
| - if (CrosLibrary::Get()->EnsureLoaded()) {
|
| - chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
|
| - EnableWifiNetworkDevice(true);
|
| - }
|
| -}
|
| -
|
| void NetworkScreen::SubscribeNetworkNotification() {
|
| if (!is_network_subscribed_) {
|
| is_network_subscribed_ = true;
|
| @@ -255,13 +99,6 @@ void NetworkScreen::UnsubscribeNetworkNotification() {
|
| }
|
| }
|
|
|
| -NetworkList::NetworkItem* NetworkScreen::GetSelectedNetwork() {
|
| - if (!view())
|
| - return NULL;
|
| -
|
| - return networks_.GetNetworkAt(view()->GetSelectedNetworkItem() - 1);
|
| -}
|
| -
|
| void NetworkScreen::NotifyOnConnection() {
|
| // TODO(nkostylev): Check network connectivity.
|
| UnsubscribeNetworkNotification();
|
| @@ -270,62 +107,59 @@ void NetworkScreen::NotifyOnConnection() {
|
| }
|
|
|
| void NetworkScreen::OnConnectionTimeout() {
|
| - continue_pressed_ = false;
|
| // TODO(nkostylev): Notify on connection error.
|
| - if (is_waiting_for_connect_) {
|
| - // Stop waiting & show selection combobox.
|
| - StopWaitingForConnection(true);
|
| - }
|
| + StopWaitingForConnection(network_id_);
|
| }
|
|
|
| -void NetworkScreen::OpenPasswordDialog(WifiNetwork network) {
|
| - NetworkConfigView* dialog = new NetworkConfigView(network, true);
|
| - dialog->set_delegate(this);
|
| - dialog->set_browser_mode(false);
|
| - views::Window* window = views::Window::CreateChromeWindow(
|
| - view()->GetNativeWindow(), gfx::Rect(), dialog);
|
| - window->SetIsAlwaysOnTop(true);
|
| - window->Show();
|
| - dialog->SetLoginTextfieldFocus();
|
| -}
|
| +void NetworkScreen::UpdateStatus(NetworkLibrary* network) {
|
| + if (!view() || !network)
|
| + return;
|
|
|
| -void NetworkScreen::SelectNetwork(NetworkList::NetworkType type,
|
| - const string16& id) {
|
| - int index = networks_.GetNetworkIndexById(type, id);
|
| - if (index >= 0) {
|
| - view()->SetSelectedNetworkItem(index + 1);
|
| + if (network->ethernet_connected()) {
|
| + StopWaitingForConnection(
|
| + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET));
|
| + } else if (network->wifi_connected()) {
|
| + StopWaitingForConnection(ASCIIToUTF16(network->wifi_name()));
|
| + } else if (network->cellular_connected()) {
|
| + StopWaitingForConnection(ASCIIToUTF16(network->cellular_name()));
|
| + } else if (network->ethernet_connecting()) {
|
| + WaitForConnection(
|
| + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET));
|
| + } else if (network->wifi_connecting()) {
|
| + WaitForConnection(ASCIIToUTF16(network->wifi_name()));
|
| + } else if (network->cellular_connecting()) {
|
| + WaitForConnection(ASCIIToUTF16(network->cellular_name()));
|
| } else {
|
| - view()->SetSelectedNetworkItem(0);
|
| + view()->EnableContinue(network->Connected());
|
| }
|
| }
|
|
|
| -void NetworkScreen::ShowConnectingStatus() {
|
| - view()->ShowConnectingStatus(is_waiting_for_connect_,
|
| - connecting_network_.label);
|
| -}
|
| +void NetworkScreen::StopWaitingForConnection(const string16& network_id) {
|
| + NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary();
|
| + bool is_connected = network && network->Connected();
|
| + if (is_connected && continue_pressed_) {
|
| + NotifyOnConnection();
|
| + return;
|
| + }
|
|
|
| -void NetworkScreen::StopWaitingForConnection(bool show_combobox) {
|
| - if (connection_timer_.IsRunning())
|
| - connection_timer_.Stop();
|
| - is_waiting_for_connect_ = false;
|
| - connecting_network_.network_type = NetworkList::NETWORK_EMPTY;
|
| - connecting_network_.label.clear();
|
| - if (show_combobox)
|
| - ShowConnectingStatus();
|
| + continue_pressed_ = false;
|
| + connection_timer_.Stop();
|
| +
|
| + network_id_ = network_id;
|
| + view()->ShowConnectingStatus(false, network_id_);
|
| + view()->EnableContinue(is_connected);
|
| }
|
|
|
| -void NetworkScreen::WaitForConnection(const NetworkList::NetworkItem* network) {
|
| - is_waiting_for_connect_ = true;
|
| - DCHECK(network);
|
| - connecting_network_.network_type = network->network_type;
|
| - connecting_network_.label = network->label;
|
| - if (connection_timer_.IsRunning())
|
| - connection_timer_.Stop();
|
| +void NetworkScreen::WaitForConnection(const string16& network_id) {
|
| + connection_timer_.Stop();
|
| connection_timer_.Start(base::TimeDelta::FromSeconds(kConnectionTimeoutSec),
|
| this,
|
| &NetworkScreen::OnConnectionTimeout);
|
| - if (continue_pressed_)
|
| - ShowConnectingStatus();
|
| +
|
| + network_id_ = network_id;
|
| + view()->ShowConnectingStatus(true, network_id_);
|
| +
|
| + view()->EnableContinue(false);
|
| }
|
|
|
| } // namespace chromeos
|
|
|