Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_H_
      6 #define CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_H_
      7 #pragma once
      8 
      9 #include "base/memory/ref_counted.h"
     10 #include "base/string16.h"
     11 #include "base/task.h"
     12 #include "base/timer.h"
     13 #include "chrome/browser/chromeos/cros/network_library.h"
     14 #include "chrome/browser/chromeos/login/keyboard_switch_menu.h"
     15 #include "chrome/browser/chromeos/login/language_switch_menu.h"
     16 #include "chrome/browser/chromeos/login/message_bubble.h"
     17 #include "chrome/browser/chromeos/login/network_screen_delegate.h"
     18 #include "chrome/browser/chromeos/login/view_screen.h"
     19 #include "chrome/browser/chromeos/options/network_config_view.h"
     20 
     21 class WizardScreenDelegate;
     22 
     23 namespace chromeos {
     24 
     25 class HelpAppLauncher;
     26 class NetworkSelectionView;
     27 
     28 class NetworkScreen : public ViewScreen<NetworkSelectionView>,
     29                       public MessageBubbleDelegate,
     30                       public NetworkScreenDelegate {
     31  public:
     32   explicit NetworkScreen(WizardScreenDelegate* delegate);
     33   virtual ~NetworkScreen();
     34 
     35   // NetworkScreenDelegate implementation:
     36   virtual void ClearErrors();
     37   virtual bool is_error_shown() { return bubble_ != NULL; }
     38   virtual LanguageSwitchMenu* language_switch_menu() {
     39     return &language_switch_menu_;
     40   }
     41   virtual KeyboardSwitchMenu* keyboard_switch_menu() {
     42     return &keyboard_switch_menu_;
     43   }
     44   virtual gfx::Size size() const { return GetScreenSize(); }
     45 
     46   // views::ButtonListener implementation:
     47   virtual void ButtonPressed(views::Button* sender, const views::Event& event);
     48 
     49   // NetworkLibrary::NetworkManagerObserver implementation:
     50   virtual void OnNetworkManagerChanged(NetworkLibrary* network_lib);
     51 
     52  protected:
     53   // Subscribes NetworkScreen to the network change notification,
     54   // forces refresh of current network state.
     55   void Refresh();
     56 
     57  private:
     58   FRIEND_TEST(NetworkScreenTest, Timeout);
     59 
     60   // ViewScreen implementation:
     61   virtual void CreateView();
     62   virtual NetworkSelectionView* AllocateView();
     63 
     64   // Overridden from views::BubbleDelegate.
     65   virtual void BubbleClosing(Bubble* bubble, bool closed_by_escape) {
     66     bubble_ = NULL;
     67   }
     68   virtual bool CloseOnEscape() { return true; }
     69   virtual bool FadeInOnShow() { return false; }
     70   virtual void OnHelpLinkActivated();
     71 
     72   // Subscribes to network change notifications.
     73   void SubscribeNetworkNotification();
     74 
     75   // Unsubscribes from network change notifications.
     76   void UnsubscribeNetworkNotification();
     77 
     78   // Notifies wizard on successful connection.
     79   void NotifyOnConnection();
     80 
     81   // Called by |connection_timer_| when connection to the network timed out.
     82   void OnConnectionTimeout();
     83 
     84   // Update UI based on current network status.
     85   void UpdateStatus(NetworkLibrary* network);
     86 
     87   // Stops waiting for network to connect.
     88   void StopWaitingForConnection(const string16& network_id);
     89 
     90   // Starts waiting for network connection. Shows spinner.
     91   void WaitForConnection(const string16& network_id);
     92 
     93   // True if subscribed to network change notification.
     94   bool is_network_subscribed_;
     95 
     96   // ID of the the network that we are waiting for.
     97   string16 network_id_;
     98 
     99   // True if user pressed continue button so we should proceed with OOBE
    100   // as soon as we are connected.
    101   bool continue_pressed_;
    102 
    103   // Timer for connection timeout.
    104   base::OneShotTimer<NetworkScreen> connection_timer_;
    105 
    106   LanguageSwitchMenu language_switch_menu_;
    107   KeyboardSwitchMenu keyboard_switch_menu_;
    108 
    109   // Pointer to shown message bubble. We don't need to delete it because
    110   // it will be deleted on bubble closing.
    111   MessageBubble* bubble_;
    112 
    113   // Help application used for help dialogs.
    114   scoped_refptr<HelpAppLauncher> help_app_;
    115 
    116   DISALLOW_COPY_AND_ASSIGN(NetworkScreen);
    117 };
    118 
    119 }  // namespace chromeos
    120 
    121 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_NETWORK_SCREEN_H_
    122