15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_NETWORK_DROPDOWN_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_NETWORK_DROPDOWN_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/status/network_menu.h"
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chromeos/network/network_state_handler_observer.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon_animation_observer.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebUI;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkMenuWebUI;
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class NetworkState;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class which implements network dropdown menu using WebUI.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkDropdown : public NetworkMenu::Delegate,
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        public NetworkStateHandlerObserver,
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                        public ui::network_icon::AnimationObserver {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  class Actor {
302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch   public:
312385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    virtual ~Actor() {}
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    virtual void OnConnectToNetworkRequested() = 0;
332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  };
342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  NetworkDropdown(Actor* actor, content::WebUI* web_ui, bool oobe);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~NetworkDropdown();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This method should be called, when item with the given id is chosen.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnItemChosen(int id);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // NetworkMenu::Delegate
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OpenButtonOptions() OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldOpenButtonOptions() const OVERRIDE;
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnConnectToNetworkRequested() OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // NetworkStateHandlerObserver
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE;
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void NetworkConnectionStateChanged(
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      const NetworkState* network) OVERRIDE;
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void NetworkListChanged() OVERRIDE;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // network_icon::AnimationObserver
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void NetworkIconChanged() OVERRIDE;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Refreshes control state. Usually there's no need to do it manually
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // as control refreshes itself on network state change.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Should be called on language change.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Refresh();
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetNetworkIconAndText();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Request a network scan and refreshes control state. Should be called
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // by |network_scan_timer_| only.
66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void RequestNetworkScan();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Network menu.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<NetworkMenuWebUI> network_menu_;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
712385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  Actor* actor_;
722385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebUI* web_ui_;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Is the dropdown shown on one of the OOBE screens.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool oobe_;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Timer used to periodically force network scan.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RepeatingTimer<NetworkDropdown> network_scan_timer_;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NetworkDropdown);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_NETWORK_DROPDOWN_H_
87